快速业务通道

使用自定义ViewHelper来简化Asp.net MVC view的开发 - part1

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20

从开发者的角度来看,创建Asp.net MVC的View是一件很爽的事,因为你可以精确控制最终生成的HTML 。具有讽刺意味的是不得不写出每一行HTML代码同时也是Asp.net MVC的View中让人不爽的地方。让我用 我的一个经历来告诉我创建ASP.Net MVC view Helpers背后灵感的由来。由一小部分开发人员(包括我) 和一个CSS设计人员(我们叫他Ricky)组成的小组,开始了一个新的Asp.net MVC的项目,在项目开发过程 中;我给页面添加了一些TextBox和一些其他元素,我check-in了我的代码,直到回家我也没再想起过这 事。隔夜早晨,刚上班时我就从CSS设计那里收到一封邮件来通知我我必须按照他的CSS指导方针来写HTML ,比如说对于textbox,必须遵循以下规则:

每个textbox必须内嵌在li标签中

每一个textbox都必须有一个label标签的for属性与之对应

textbox必须使用input标签并设置type属性为text

对于这些要求我一一照做并修改我的代码符合了后两条规则,但我忘了关于li的指导方针,我很快更新 了页面并提交了我的代码。几天后,项目又推进了很多,Ricky来到我的办公桌前并让我看看我所做的改 变。打开页面,他开始一一列举那些我不遵循它的UI规定的地方,有很多地方我都忽视了因为我甚至不知 道这些指导方针的存在.在他指出这些后,我想:一定会有方法可以让我们两个人都如愿以偿.对于我来说 只是需要html标签的id,对于Ricky来说他需要我的HTML符合规范来让他的CSS文件能够选择到合适的html 。所以我们引入了view helper.

在我用Asp.net MVC时我注意到我自己写了很多纯Html,比如div和span,同时伴随使用了很多 System.Web.Mvc.HtmlHelper来生成html,比如说一个输入名字的textbox:

<li>
   <label for="FirstName">First name</label>
   <%= Html.TextBox("FirstName") %>
   <%= Html.ValidationMessage("FirstName", "*") %>
</li>

我就想,是不是能有一种方法来将上面的所有代码融合在一起呢。这样不仅让我编程更加轻松,而且 再也不用担心Ricky给我设置的条条框框了。理想的情况下会满足以下标准:

容易执行

重用性好

强制执行某些标准(比如Ricky的)

和标准的HtmlHelper扩展方法用起来没太大区别

容易使用

在我们进入执行这个的细节之前如果你感觉这听起来像又回到了Web Form时代,那就错了。view helper仅仅是在创建HTML的时候起辅助作用,而不是将HTML进行抽象。我关心的只是HTML在页面中的显示 效果以及使用javascript的行为更轻松.而不是textbox是否放入li中,当我需要创建一个textbox时,我只 需在view中放入如下代码:

<% Html.NewText("FirstName", "First name"); %>

我想声明我仅仅是想将创建HTML延迟到另一个类中。使用View helper我可以轻松做到这一点。首先我 们先来看标准的HtmlHelper扩展方法如何做到这一点.

Html helper有两种实现用法,大多数的使用方法都会如下:

<%= Html.TextBox("FirstName") %>

而还有一种用法和声明一个form元素很相似:

<% using (Html.BeginForm()) { %>
   <!-- Other elements here-->
<% } %>

上面两种方法的主要区别是Html.TextBox仅仅返回一个string来注入到view中。这也是为什么使用 <%=而不是标准的的代码块。而另一种以对象作为返回类型的方法更老练许多,比如, System.Web.Mvc.Html.MvcForm,这个对象放入using语句.对象被创建时一些HTML就会被注入到view中(严 格说:并不是对象创建时,但很接近)还有一些事在对象被回收时将 html注入view(也就是碰到”}”符号 时).使用这种方法的好处是可以在usin

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号