[一步一步MVC]第四回:漫谈ActionLink,有时“胡搅蛮缠”

系列文章导航:

[一步一步MVC]第一回:使用ActionSelector控制Action的选择

[一步一步MVC]第二回:还是ActionFilter,实现对业务逻辑的统一Authorize处理

[一步一步MVC]第三回:MVC范例大观园

[一步一步MVC]第四回:漫谈ActionLink,有时“胡搅蛮缠”

[一步一步MVC]第五回:让TagBuilder丰富你的HtmlHelper

[一步一步MVC]第六回:什么是MVC(上)?


MVC时代来临了,但是一开始是不被很多人接受的。可能的主要原因是,大家不得不告别拖拉控件的至爽感受,回到貌似ASP的历史岁月。所以,心有不甘是可以理解的,然而时代显然是进步的。我们虽然必须在View中进行很多HTML代码的工作,但是MVC为我们提供了可以堪称完美的方案(至少我是这样认为的),那就是HtmlHelper。在MVC的View层,我们有很多熟悉的面孔,例如Html.Encode、Html.AntiForgeryToken、Html.BeginForm、Html.TextBox等,而其中ActionLink算是其中的“猛将兄”。

浅议HtmlHelper

简单的说,HtmlHelper就是一个封装了ViewContext、IViewDataContainer、RouteCollection等上下文信息的一箩筐静态方法类(注,HtmlHelper本身并不是静态类),其中包含了我们上文介绍的熟悉身影Encode、AntiForgeryToken等,但不包含BeginForm、TextBox,当然也不包括ActionLink,其原因是BeginForm、TextBox、ActionLink其实是HtmlHelper的扩展方法,我们可以从智能感知提示中最直观的得到了解:

o_anytao_mvc_07_actionlinktalk_01[1]

显然,ActionLink和Encode的智能提示标记是有区别的。

所以,HtmlHelper其实很简单,而通过Extension Methods对其的“功能注入”机制实现了极大的扩展空间。而且,HtmlHelper封装了ViewContext、RouteCollection等上下文信息,为实现扩展带来便利。所以,顺便提一下,这也正是老赵同志在为视图自定义辅助方法(上)中实现JQueryHelper时引入相应元素(ViewContext、RouteCollection、ViewPage),有着异曲同工之妙,所以HtmlHelper并不是唯一的选择,高兴的话,你也可以类似于AnytaoHelper之类的东东。

所以,通过HtmlHelper就可在运行时动态生成HTML代码,其实我们在WebForm时代就经常玩儿这种“阴招”,然而在HtmlHelper这里,显然已经发扬光大了。例如老赵的JQueryHelper就通过一系列的包装,省去了对validation的麻烦语法。

同时,扩展HtmlHelper其实及其简单。例如:

 

// 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技术[一步一步MVC]第四回:漫谈ActionLink,有时“胡搅蛮缠”,转载需保留来源!

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。