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?
