gpt4 book ai didi

asp.net-mvc - ASP.Net MVC : Creating custom controls kind of messy?

转载 作者:行者123 更新时间:2023-12-01 19:42:31 25 4
gpt4 key购买 nike

主要问题:是否有更好的方法来完成创建可重用控件?

因此,我们的想法是制作一个分页控件,从而基本上不再需要在多个 View 上输入几乎相同的标记。它正在采取这个:

 <%= 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 }))%>

然后把它变成这样:

<%= Html.Pager("View", "Controller", "RouteName", Model, new Dictionary<String, Object> { {"parentForumId", Model.ParentForumId}}, " ") %>

如您所见,我传入了所需的 View 、 Controller 、路由名称、模型和用于将请求变量添加到链接的 url 的字典。

我发现我必须为 HtmlHelper 类创建一个扩展方法,并且基本上采用 ASP.Net 中的完整类(具有像 CreateChildControls 这样的好方法)并将其全部塞入一个主要方法中,该方法返回一个字符串。

这是执行此操作的首选方法吗? ASP.Net 方式的一个好处是对类进行标记,因为您拥有将标记属性转换为类属性的 html 标记。它通常用于更清晰的标记,但不可否认是“假”html。在这种情况下,我有一个方法可以将一英里长的签名抽出 html。由于我没有基本的 WebControl 类,我制作的每个控件都必须具有具有相同基本需求的方法调用,例如 CssClass 或 ID。

话虽这么说,我想我可以传入一个属性字典,因为 HtmlHelper.GenerateRouteLink无论如何我正在使用的方法调用一个,但这看起来真的很乱。

有更好的方法吗?

最佳答案

首先,它都是 ASP.NET...一个是 MVC,另一个是 WebForms。当您一直说“ASP.NET 方式”时,我花了几秒钟才意识到您在说什么。 :P

MVC 的想法是您的 View 是“愚蠢的”,除了呈现数据的绝对骨架基础之外没有任何实际行为。在 WebForms 中, View 与呈现它们和处理 View 事件的行为紧密相关。这虽然方便,但使得 WebForms View 很难进行单元测试,因为 View 内容和行为是链接的,有时是混合的。

MVC View 使用 HtmlHelper 和 AjaxHelper 之类的东西的原因是尽可能将行为与 View 分开。与 WebForms 中的用户或服务器控件不同,您可以对 Html.Pager 扩展方法进行完全单元测试,因为逻辑是纯代码,无需混合这些 UI 问题或链接到一堆不可测试的 UI 级别类型。同样的一般规则适用于 MVC Controller ......它们只是代码,没有链接到事件或类似的东西。

它在短期内可能不太方便,因为您目前已经习惯了旧的 WebForms 做事方式。不过,给自己一些时间,您可能会开始意识到 MVC 首选的处理方式带来的好处。在 HtmlHelper 上编写 Pager 扩展方法确实是使用 MVC 做事的首选方式。

至于一英里长的签名位...搜索(试试 Bing.com!)流畅的样式界面和 HtmlHelper。流畅的风格开始在像 MVC View 这样的环境中占有一席之地,在这些环境中,您可能会拥有巨大的签名。一般的想法是基于方法链,有点像 jQuery,并且可以将那些长签名缩短为一系列更短和更有意义的链式方法调用,这些方法调用设置你的 html 助手,最后调用 .Render 方法或其他东西相似的。

关于asp.net-mvc - ASP.Net MVC : Creating custom controls kind of messy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/987879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com