|
系列文章導(dǎo)航:
[一步一步MVC]第一回:使用ActionSelector控制Action的選擇
[一步一步MVC]第二回:還是ActionFilter,實(shí)現(xiàn)對(duì)業(yè)務(wù)邏輯的統(tǒng)一Authorize處理
[一步一步MVC]第四回:漫談ActionLink,有時(shí)“胡攪蠻纏”
[一步一步MVC]第五回:讓TagBuilder豐富你的HtmlHelper
MVC時(shí)代來臨了,但是一開始是不被很多人接受的。可能的主要原因是,大家不得不告別拖拉控件的至爽感受,回到貌似ASP的歷史歲月。所以,心有不甘是可以理解的,然而時(shí)代顯然是進(jìn)步的。我們雖然必須在View中進(jìn)行很多HTML代碼的工作,但是MVC為我們提供了可以堪稱完美的方案(至少我是這樣認(rèn)為的),那就是HtmlHelper。在MVC的View層,我們有很多熟悉的面孔,例如Html.Encode、Html.AntiForgeryToken、Html.BeginForm、Html.TextBox等,而其中ActionLink算是其中的“猛將兄”。
淺議HtmlHelper
簡單的說,HtmlHelper就是一個(gè)封裝了ViewContext、IViewDataContainer、RouteCollection等上下文信息的一籮筐靜態(tài)方法類(注,HtmlHelper本身并不是靜態(tài)類),其中包含了我們上文介紹的熟悉身影Encode、AntiForgeryToken等,但不包含BeginForm、TextBox,當(dāng)然也不包括ActionLink,其原因是BeginForm、TextBox、ActionLink其實(shí)是HtmlHelper的擴(kuò)展方法,我們可以從智能感知提示中最直觀的得到了解:
顯然,ActionLink和Encode的智能提示標(biāo)記是有區(qū)別的。
所以,HtmlHelper其實(shí)很簡單,而通過Extension Methods對(duì)其的“功能注入”機(jī)制實(shí)現(xiàn)了極大的擴(kuò)展空間。而且,HtmlHelper封裝了ViewContext、RouteCollection等上下文信息,為實(shí)現(xiàn)擴(kuò)展帶來便利。所以,順便提一下,這也正是老趙同志在為視圖自定義輔助方法(上)中實(shí)現(xiàn)JQueryHelper時(shí)引入相應(yīng)元素(ViewContext、RouteCollection、ViewPage),有著異曲同工之妙,所以HtmlHelper并不是唯一的選擇,高興的話,你也可以類似于AnytaoHelper之類的東東。
所以,通過HtmlHelper就可在運(yùn)行時(shí)動(dòng)態(tài)生成HTML代碼,其實(shí)我們?cè)赪ebForm時(shí)代就經(jīng)常玩兒這種“陰招”,然而在HtmlHelper這里,顯然已經(jīng)發(fā)揚(yáng)光大了。例如老趙的JQueryHelper就通過一系列的包裝,省去了對(duì)validation的麻煩語法。
同時(shí),擴(kuò)展HtmlHelper其實(shí)及其簡單。例如:
// Release : code01, 2009/04/30
// Author : Anytao, http://www.anytao.com
public static string Label(this HtmlHelper helper, string name, string value)
{
return string.Format("{1}
", name, value);
}
NET技術(shù):[一步一步MVC]第四回:漫談ActionLink,有時(shí)“胡攪蠻纏”,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。