其實任何資料里面的任何知識點都無所謂,都是不重要的,重要的是學習方法,自行摸索的過程(不妥之處歡迎指正)
匯總:http://www.cnblogs.com/dunitian/p/4822808.html#mvc
xss防御:http://www.cnblogs.com/dunitian/p/5722370.html#xss
4.共用其他視圖
不同控制器渲染同一個視圖文件。這個應用場景還是比較多的,比如同樣是Article的集合,一個是顯示最新文章列表,一個是顯示文章列表,一個是顯示編輯推薦文章列表,基本上都是<ul><li></li></ul>這種結構,那么是不是可以把這種的View弄一個共用視圖出來呢?
案例:
技能點講解:先看效果:
同一個視圖
return View("~/Views/Index/Index.cshtml");
5.強類型視圖(常用命名空間可以定義在Views下的Web.Config)
通過ViewBag傳遞少量數據的確用的爽,我也挺喜歡這樣的。但是處理數據的時候就特別麻煩了(ViewBag是弱類型的,不能點出我們需要的屬性),這時候強類型就油然而生了~~~
擴展:動態值不能作為參數傳遞給擴展方法(C#編譯器在編譯的時候為了選擇正確的擴展方法肯定是需要其真正類型的)【你傳參數用var類型的傳着試試~~】
效果:
代碼部分:
Model:
控制器:
視圖:
常用命名空間可以設置在Views的web.config中,eg:
6.Razor的簡單接觸(內含XSS防御)
初次接觸XSS: http://www.cnblogs.com/dunitian/p/5286772.html
說下Html和Javascript的Xss防御
Razor表達式是用HTML自動編碼的,我們來看這個例子:
是不是突然感覺到微軟其實為我們做了很多准備,操了很多心?有木有,這些安全意識很多人都是沒有的
如果你把用戶的輸入用Html.Raw的方式顯示,那就坑爹了(盡量避免這種方式,至少用戶輸入的不能用這種)
--------------------------------------------------------------------------------------------------
下面演示一下項目中Ajax的方式
用戶輸入變個方式不就繞過驗證了嗎
解決方法:@Ajax.JavaScriptStringEncode(ViewBag.Test2)
應用建議:Html.Encode(),@Ajax.JavaScriptStringEncode()
--------------------------------------------------------------------------------------------------------
如果你覺得萬事大捷,呃。。。。
下面說下URL的XSS防御:(這個主要是一些自定義的模板引擎或者靜態頁面或者Aspx頁面需要當心)
原理說一下:比如你是一個接受用戶的超鏈接:<a href="http://www.dkill.net?mmd=ddf">什么鬼?</a>
如果用戶mmd輸入的是這個構造呢?===> "></a><script src="//cdn.bootcss.com/jquery/1.10.2/jquery.min.js"></script><a>
想一想,為什么這樣構造?==》這樣構造不影響他正常使用,那發現的幾率就小了
解決方法:Url.Encode
諸如這種的寫法以后就不要出現了,如果是因為帶了特殊符號而傳不過來可以編碼后再傳
如果你的視圖是aspx的記得過濾HTML,JS,URL哦~基本上問題都出在這
推薦使用:AntiXSS
7.布局系列
1._ViewStart
MVC5以前都是要手動引用”母版頁“
自從MVC5有了_ViewStart.cshtml,感覺整個春天都來了
視圖都不需要引用”母版頁“了(默認就全部引用了_Layout)
2.RenderSection~~呈現特別的節部分
一般不推薦這么寫:
如果子頁面沒有定義Footer的節,那么就報錯了
其他兩種寫法:子頁中定義了Footer就顯示子頁的,沒有定義就顯示默認
另一種方式(逆天用的比較多):@RenderSection("Footer", false)
3.@RenderBody() 呈現子頁的主體內容
--------------------------------------------------------------------
4.部分視圖(主要就是Html.Partial 、 Html.RenderPartial、Html.RenderAction)
先說下這兩個的區別:Html.Partial 和 Html.RenderPartial
效果:(Html.Partial直接顯示視圖部分,不經過控制器)
再說下Html.RenderPartial 和 Html.RenderAction
RenderPartia l咋一看和 RenderAction 差不多,但===》(RenderPartia 我不怎么用,感謝2樓朋友指正錯誤)
來看例子:
而RenderAction卻可以顯示:
-------------------------------------
重頭戲來了~那么對於異步咋辦呢?怎么就報錯了呢?(參考我的這個文章:http://www.cnblogs.com/dunitian/p/5481138.html)
可能有些人還不知道“異步是什么鬼”,呃呃。。。
好吧,舉個例子,具體的不在本文研究之中,可以自信搜索或者關注后續的文章
步入正軌,繼續我們的分部視圖講解:
控制器部分:
視圖:
調用:
有時候你這樣寫也不會報錯,那是因為你沒有的異步等待沒有被阻止,或者你版本比較高
分部視圖推薦寫法:
@{Html.RenderAction("xx", "xxx");}
Html.Partial 推薦應用場景:Seo,CSS,Script