標籤:按鈕 select lambda selected font lin 解耦 而不是 nbsp
1.為什麼要使用HtmlHelper?
1.首先HtmlHelper是一個類型,MVC中的ViewPage<TModel>中的一個屬性Html屬性,這個屬性的類型就是HtmlHelper<TModel>類型的,這樣封裝後最後產生的代碼和我們手寫的html代碼是完全一樣的,沒有任何冗餘,同時可以使得我們直接“點“出來想要的標籤,方便開發。
2.可是只是可以“點”出來這點優勢,好像沒有什麼說服力,因為這些HtmlHelper代碼需要幕後處理後才能轉換成html代碼,多走了一個流程,還有另一個優勢就是HtmlHelper產生的html代碼他是根據路由規則去匹配的,也就是以後你修改了路由規則也是不影響的,實現了路由規則和前端介面的解耦(比如超連結標籤),
3.使用HtmlHelper可以實現更加強大自動綁定。可以直接和ViewData["username"]="123"進行綁定,當然前提是前端的名字和ViewData的名字一樣
2.HtmlHelper的使用
(1)超連結
<%:Html.ActionLink("連結到Index","Index","Home",new{name="ww", age="ss"},new{ id="1",@class="cls"}) %>
對於上面的@class這個是講class進行轉義,因為在C#中class是一個關鍵字,對於ActionLink中有很多的重載,可以設定屬性,確定控制器和行為
等效
<a calss="cls" href=“/Home/Indx/1?name=ww&age=ss”>連結到Index</a>
(2)下拉式清單
<% List<SelectListItem> list = new List<SelectListItem>(); list.AddRange (new SelectListItem []{ new SelectListItem() { Text="大學",Value ="0",Selected =false }, new SelectListItem (){ Selected=true,Text ="高中",Value ="1"} }); ViewData["drop"] = list; %>> <%:Html .DropDownList("drop",null ,new{id ="33"}) %>
上面可以發現已經實現與ViewData的自動綁定,否則使用手寫的話沒法實現,Form標籤也只是使用強型別頁面實現綁定
(3)選項按鈕
<%:Html.RadioButton("sex",0) %>男 <%:Html.RadioButton("sex",1) %>女
(4)form表單
<%using(Html.BeginForm("Index","Home",FormMethod.Post,new{id="form1", enctype=""})){ %> <input type ="submit" value ="提交"> <%} %>
因為BeginForm方法傳回型別繼承自IDispose,所以使用using。
(5)關於For系列
對於每一個Html中的標籤都有兩個方法,一個帶有for,一個不帶for,上面展示的都是沒有for的展示
對於for系列,可以使用Lambda運算式,這種方法經常和強型別頁面一起使用
Html.TextBoxFor(userInfo=>UserInfo.UserName,new{id ="ss"})
3.關於ASPX引擎中的輸出,可以使用“=”,也可以使用“:”
這兩種方式都是可以實現列印出來的效果,“=”當字串中含有html代碼的時候,可以將html代碼翻譯出來,但是這種方式存在安全危機,也就是容易引發頁面安全錯誤提示
“:”是將字串中的html代碼原陽輸出,也就是實現了EnCode操作,增加安全性,防止跨指令碼攻擊,但是倘若想要列印出翻譯後的結果如何處理呢?,此時可以模仿一下微軟的處理,因為微軟中的HtmlHelper中就是將html翻譯出來的,也就是MvcHtmlString類
<%:MvcHtmlHelper.Create(ViewData["ss"].ToString())%>
這樣就OK了,所以綜上所述,建議使用“:”輸出,而不是使用“=”。
MVC學習之HtmlHelper