【发布时间】:2010-11-02 12:56:31
【问题描述】:
主要问题:有没有更好的方法来完成创建可重用控件?
所以我们的想法是制作一个分页控件,基本上不再需要在多个视图上输入几乎相同的标记。它是这样的:
<%= 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}}, " ") %>
如您所见,我传入了所需的视图、控制器、路由名称、模型和字典,用于将请求变量添加到链接的 url。
我发现我必须为 HtmlHelper 类创建一个扩展方法,并且基本上将 ASP.Net 中的完整类(使用 CreateChildControls 之类的好方法)并将其全部塞入一个返回字符串。
这是执行此操作的首选方式吗? ASP.Net 方式的一个好处是标记到类,因为您拥有将标记属性转换为类属性的 html 标记标记。它通常用于更清晰的标记,但不可否认的是“假”html。在这种情况下,我有一个方法可以用一英里长的签名抽出 html。而且由于我没有基本的 WebControl 类,所以我制作的每个控件都必须具有具有相同基本需求的方法调用,例如 CssClass 或 ID。
话虽如此,我想我可以传入一个属性字典,因为 HtmlHelper.GenerateRouteLink 无论如何,我正在使用的方法调用一个,但这看起来真的很乱。
有没有更好的方法来做到这一点?
【问题讨论】:
标签: asp.net-mvc controls