2019/0618/MVC Part2 PhotoSharing Route & Sitemap & _LayOut & AJAX

今日 倒數第二次 MVC課程

今日會把Part2 結束

#09_Route_Sitemap ( Route )

兩個重點

一個是路由

預設長這樣

接著我們自己定義一個

沒放在大括弧 { } 就要完全一樣照打不會自動去找

有點類似 donaname

可以讓懂得人也看不出你網站結構

網址沒有再分大小寫

Constraints 約束 ( 正負向表列

##Expration expression

Regular Expression

^開頭$結尾

[ ] 或

在 [ ] 內多一個^是負向表列

##接著要把url改為自訂的相對應內容

例如留言的url為留言的title

首先啟用自訂action 方法

再到controller 新增action 專門服務它

寫自訂

Find 只能找 key

所以要用where

如果title一樣怎辦 , 結果說機率太小所以沒處理

記得要啟用 [Route(@”photo/title/{title}”)]

###Chrome 如果 url 有特殊符號 就是被編碼掉了 如空白就是%

SEO 排名會比較前面

以上為路游的介紹

###App_Start/RouteConfig.cs

###Controller s/PhotosController.cs

###老師步驟

#09_Route_Sitemap ( Sitemap )

下個例子要講layout

Navbar

有很多個做法 老師介紹他覺得還不錯的

Sitemap 在 webform 有控制項

但在mvc首先要安裝插鍵

但要先把entityframework 降版 6.1.3

寫mvc要知道有些功能通常都有元件

Mvc sitemap provider 可以只裝mvc5的版本

把它當像是webform裡面的sitemap來用就好

一個xml檔案

接著做個簡單的例子

###Mvc.sitemap

有層級關係

指定controllername跟actionname

這個講完後會補充 error hander 時提到的slider showS

做好後

現在先讀出來

到 views -> photos -> index.cshtml

@Html.mvcsitemap().menu()

@Html.mvcsitemap().sitemappath()

有bug 沒解決 下課休息

剛剛的問題是發生在Routerconfig 錯了

400 request 就錯了

直接打/photos不帶任何參數就可以

url沒有分大小寫

所以要自訂自己的router 千萬不要跟 controllername一樣不然就沒意義

等等在 layout 解決

Navbar 其實就是用 ul 實現的所以現在就先用 ul 做

@Menu 後面的參數 多載很多 必須要知道到底在調整啥

現在先以 (三參數做示範

開始節點

子節點

階層調整成需求的 就可以上 class

這個sitemap先壓縮起來這其實只是鋪耿要給layout用的

下午例子要去layout跟menu一起講

下午還要講 ajax ??

###Mvc.sitemap

###Views/photos/index.cshtml

###老師步驟

Layout 相當於 webform 的 masterpage

#10_LayOut

Shared 是大家都要用到的東西就會放在這

Partialview

錯誤頁面 等等 …

_有底線的沒辦法直接存取

所有的 View都在 @RenderBody() 裡面

接著真正的做一個空的 _layout

ViewBag.Title 通常表示那個 view 的資訊

Bundle 在講 ??

@styles.Render

用html5語意標籤來寫可以增加 seo 排名

接著調整樣式 利用 bs 3

重點來了

要把 @Html.ActionLink 改為 @sitemap

這時候問題來了 ul 如果用 sitemap 並沒辦法套用 class

那就要用 jq dom 塞 … ( 如果不是預設的內容就要用 jq 塞

接著測試 新增 TestBoostrap.cshtml

@{Layout=”_MainLayout.cshtml”}

各自view所做的樣式修改

最好是留在各自的view內

然後利用@section CSS{<style></style>}

到原本的layout內利用

@RenderSection(“CSS”,false)

@RenderSection(“Script”,false)

false不需要每一個view都有那個區塊

##指定預設_Layout ( 正負面表列

###Views/_ViewStart.cshtml

###View/Shared/_MainLayout.cshtml

###老師步驟

#11AJAX

如果沒有像Webform AJAX控制項時的用法

AJAX即“Asynchronous JavaScript and XML”(非同步的JavaScript與XML技術),指的是一套综合了多項技術的瀏覽器端網頁開發技術。

一個crud 通常就是一個 controller

那我們就新增一個 commentController

該using的 + dbcontext

###Controller s/commentController .cs

增加一個 partialview

在上面加上 [childactiononly]

不直接回應瀏覽器要求

如果直接在url key 會顯示此動作只能由子要求存取

查詢帶參數到partialview

這樣 這個 partialview 就做好了

接著新增partialview的檢視 create as a partialview

###Views/Shared/_CommentsForPhoto.cshtml

用 foreach 讀出來

接著去修改 Display.cshtml的 partialview鏈結

以上為顯示的部分

修改這些是為了 等等 的 ajax

##接著要安裝Ajax的插件

Microsoft.jquery.unobtrusive.ajax

這個是用後端然後可以寫前端的套件

Include script jquery.unobtrusive-ajax.js

###Views/Shared/_MainLayout.cshtml

接著回到 commentcontroller.cs

新增一個 _Create的partialview

一樣查詢

為了區別viewname可以跟action不同名稱

Return 時 雙引號 “partialview名稱”

接著新增檢視 記得要把VIEW名稱改為“partialview名稱”

接著到 shared _createacomment.cshtml (要做表單 ?

Partialview 階層

display

_commentsForPhoto.cshtml

_createacomment.cshtml (後悔了 改為範本 讓它直接蓋過去

###_createacomment.cshtml

要幫整個_commentsForPhoto.cshtml 套上form

而且要用 ajax的方法

@using (Ajax.BeginForm(“_createacomment.cshtml”,new{PhotoID=}, AjaxOptions局部區塊ID…)

AjaxOptions {UpdateTargetId=局部區塊ID,送出去的方法}

再回到 CommentController.cs 新增 [HttpPost]_CommentsForPhoto 多載(不同參數不同傳送方法)

把資料讀出來在塞回 同一頁 自己

測試

剛剛用範本產生的部分有錯 削掉就成功了

###老師步驟

結果ajax的地方沒有錄影錄到 …

##補充功能 刪除

Panel-footer

有登入還可以判斷登入狀態

下一個 actionlink

要帶參數 然後 帶 class 帶 onclick

接著到 controller 寫刪除的 action

到此 MVC Part2告一個段落 , 可以拿它來應用很多地方

接下來會介紹一些跟專案本身進度沒關聯性

如 Include bundle ?

狀態管理 viewbag viewdata session

Last updated

Was this helpful?