ASP.NET MVC 重点教程一周年版 第八回 Helper之演化

凡事出现必有原因

就像Filter,它是为了解决在一类的Action之前或之后执行统一的代码而产生的。

而Helper则是为了方便View的开发而产生的。

下面我们来解决几个问题,来看看Helper是怎么演化出来的。

题目:如何在View中写一个超级连接连接到主页?

这个问题看起来很好回答:

<a href="/home/index">首页</a>

 

其实上面这种不能称之为方案的写法其实是最好的,没有调用任何的方法,仅用纯的HTML就解决了问题。

但是如果Route规则改变了那怎么办呢?就像原来的

            routes.MapRoute(
                "Default",  
                "{controller}/{action}/{id}",
                new { controller = "Home", action = "Index", id = "" }
            );

改为了

            routes.MapRoute(
                "Default",  
                "{controller}/{action}.htm",
                new { controller = "Home", action = "Index" }
            );

 

扩展名变了,如果按上个答案那连接就要改为

<a href="/home/index.htm">首页</a>

 

如果项目中涉及到此Route规则的引用有很多的话,那么这么批量的改肯定会累死人的,而且还容易出错

那我们应该怎么办呢?

所以我们就要用UrlHelper

<a href="<%=Url.Action("Index","Home")%>">首页</a>
 
这样在Route规则变化的情况下也会得到正确的地址
 

上面的方法使Url可以应对变化,可是还有一个问题就是href=”<%=%>”这种方式在VS中是很难智能感知和调试的,所以要有一种很好的调试方式于是就产生了最初的HtmlHelper

<%=Html.ActionLink("首页","Index","Home")%>

 

这样就可以方便智能感知及调试了,而且代码也比较干净

 

上述的浅见描述了为何出现Helper,希望新学习ASP.NET MVC的朋友有所帮助。

 

ASP.NET MVC Framework 系列

posted @ 2009-03-31 22:53 重典 阅读(5987) 评论(14) 编辑 收藏

 回复 引用 查看   
#1楼2009-04-01 09:45 | 韩安      
昨天晚上11点大家都睡了吗?没人回
 回复 引用 查看   
#2楼2009-04-21 01:48 | 只睡5小时      
应该没有人这早睡觉的
马上睡觉

 回复 引用 查看   
#3楼2009-05-09 20:42 | skyaspnet      
我试了一下,

<%=Html.Action("首页","Index","Home")%>

这一句是否应该为

<%=Html.ActionLink("首页","Index","Home")%>

 回复 引用 查看   
#4楼[楼主]2009-05-10 02:31 | 重典      
@skyaspnet
谢谢,的确是有问题,已经改正了

 回复 引用 查看   
#5楼2009-05-11 21:24 | John Liu      
不错,学习中。
 回复 引用   
#6楼2009-05-26 14:23 | snow123[未注册用户]
如何得到<%=Html.TextBox("Name") %>这个文本框的值呢 除过request.Form["Name"]这种 还有别的方法吗
我想在一个表单信息提交页面中点一个按钮到另一个Action里同时还要用到表单中的几个textbox值?急死哦了

 回复 引用 查看   
#7楼[楼主]2009-05-26 14:39 | 重典      
@snow123
http://www.cnblogs.com/chsword/archive/2009/04/28/1445242.html
这一回

 回复 引用   
#8楼2009-05-26 15:00 | snow123[未注册用户]
不行呀 我看过了 还是很感谢您 就是在做网站的用户注册 用户姓名胖友个按钮式检查该用户名是否已存在 这个功能 点这个检查用户名按钮后转到另一个action做处理 科沃用了js让这个button跳转到那个action了可就是得不到文本框里的值?就我一个人用Asp.net mvc 哎
3q送上

 回复 引用 查看   
#9楼[楼主]2009-05-26 15:03 | 重典      
@snow123
这是一个Js Ajax的处理过程,要异步提交才可以确保值,与是否用MVC也没有什么关系

 回复 引用   
#10楼2009-05-26 15:08 | snow123[未注册用户]
<input type="button" value="发送验证码到我手机上" name="Send" onclick="javascript:location.href='/User/SendValidator/<%= Request.Form["UserName"] %>';"
align="left" style="width: 147px" />

我用上面的代码调试了,在action里就得不到值 为什么呢

 回复 引用 查看   
#11楼2009-12-17 11:12 | 戴超      
欢迎各位加入ASP.NET MVC框架超级群!让我们共同学习、进步!ASP.NET MVC一群:40985466人员已满!请其他有兴趣的朋友加ASP.NET MVC二群:14426077(同样可容纳500人的超级群!) 另群:49544745已作为PHP群使用!请慎重加入!欢迎大家的加入!
非常乐意为大家提供一个良好的交流平台!

 回复 引用 查看   
#12楼2009-12-17 11:13 | 戴超      
欢迎各位加入ASP.NET MVC框架超级群!让我们共同学习、进步!ASP.NET MVC一群:40985466人员已满!请其他有兴趣的朋友加ASP.NET MVC二群:14426077(同样可容纳500人的超级群!) 另群:49544745已作为PHP群使用!请慎重加入!欢迎大家的加入!
非常乐意为大家提供一个良好的交流平台!

 回复 引用 查看   
#13楼2010-01-26 22:57 | show_show      
这样来引导 很棒啊
 回复 引用 查看   
#14楼2010-03-31 13:32 | 戴超      
欢迎各位加入ASP.NET MVC框架超级群!让我们共同学习、进步!ASP.NET MVC一群:40985466人员已满!请其他有兴趣的朋友加ASP.NET MVC二群:14426077(同样可容纳500人的超级群!) 另群:49544745已作为PHP群使用!请慎重加入!欢迎大家的加入!
非常乐意为大家提供一个良好的交流平台!