Pro*_*ool 2 asp.net-mvc controls
主要问题:是否有更好的方法来完成创建可重用控件?
因此,我们的想法是使分页控制基本上不必在多个视图上输入几乎相同的标记.这是这样的:
<%= Html.ActionLink("First", "Details", new RouteValueDictionary(new { parentForumId = Model.TopicId, pageNumber = Model.FirstPage, amountToShow = Model.AmountToShow }))%>
|
<%= Html.ActionLink("Previous", "Details", new RouteValueDictionary(new { parentForumId = Model.TopicId, pageNumber = Model.PreviousPage, amountToShow = Model.AmountToShow }))%>
|
<%= Html.ActionLink("Next", "Details", new RouteValueDictionary(new { parentForumId = Model.TopicId, pageNumber = Model.NextPage, amountToShow = Model.AmountToShow }))%>
|
<%= Html.ActionLink("Last", "Details", new RouteValueDictionary(new { parentForumId = Model.TopicId, pageNumber = Model.LastPage, amountToShow = Model.AmountToShow }))%>
Run Code Online (Sandbox Code Playgroud)
把它变成这个:
<%= Html.Pager("View", "Controller", "RouteName", Model, new Dictionary<String, Object> { {"parentForumId", Model.ParentForumId}}, " ") %>
Run Code Online (Sandbox Code Playgroud)
在哪里可以看到我传递了所需的视图,控制器,路由名称,模型和用于将请求变量添加到链接的URL的字典.
我发现我必须为HtmlHelper类创建一个扩展方法,并且基本上采用ASP.Net中的一个完整的类(使用像CreateChildControls这样的好方法)并将其全部插入到一个返回字符串的main方法中.
这是首选方式吗?ASP.Net方式的一个好处是标记到类,因为你有html标记标记,它将标记属性转换为类属性.它通常是为了更清晰的标记,但诚然是"假的"HTML.在这种情况下,我有一个方法,可能是一英里长的签名泵出HTML.由于我没有基本的WebControl类,因此我所做的每个控件都必须具有相同的基本需求,例如CssClass或ID.
现在有了这样说,我想我可以传入一个属性字典,因为HtmlHelper.GenerateRouteLink方法无论如何我都会使用它,但这看起来真的很麻烦.
有一个更好的方法吗?
首先,它的所有ASP.NET ...一个是MVC,另一个是WebForms.当你一直在说"ASP.NET方式"时,我花了一秒钟才意识到你在说什么.:P
使用MVC的想法是你的视图是"愚蠢的",没有任何真正的行为,除了绝对的裸骨基础知识来呈现数据.在WebForms中,视图与呈现它们并处理视图事件的行为紧密相关.这虽然方便,但使得WebForms视图很难进行单元测试,因为视图内容和行为是链接的,有时是混合的.
MVC视图使用HtmlHelper和AjaxHelper之类的原因是为了使行为尽可能与视图分开.与WebForms中的用户或服务器控件不同,您可以完全单元测试Html.Pager扩展方法,因为逻辑是纯代码,不会混合这些UI问题或链接到一堆不可测试的UI级别类型.同样的一般规则适用于MVC控制器......它们只是代码,没有链接到事件或类似的东西.
在短期内可能不太方便,因为您目前习惯于旧的WebForms处理方式.但是,给自己一些时间,你可能会开始意识到MVC首选的做事方式带来的好处.在HtmlHelper上编写一个Pager扩展方法确实是使用MVC做事的首选方法.
至于英里长的签名位...搜索(尝试Bing.com!)以获得流畅的样式界面和HtmlHelper.流畅的风格开始在像MVC视图这样的环境中占据一席之地,在这些环境中你很可能拥有巨大的签名.一般的想法是基于方法链接,有点像jQuery,并且可以将这些长签名缩短为一系列更短,更有意义的链式方法调用,设置你的html助手,最后调用.Render方法或其他东西类似.
| 归档时间: |
|
| 查看次数: |
1097 次 |
| 最近记录: |