C# 用于生成小HTML片段的帮助器方法
我正在使用ASP.NETMVC将HTML视图与模型分离。然而,有一个具体的情况让我有点困惑 我有几个常用的小信息面板,它们本身由一些较小的信息面板组成。它们从各种模型中包含的子类获取数据,有时是单个实例,有时是对象列表 目前,这是使用局部视图完成的,通过模型参数传递适当的数据,例如:C# 用于生成小HTML片段的帮助器方法,c#,asp.net-mvc,asp.net-mvc-4,html-helper,C#,Asp.net Mvc,Asp.net Mvc 4,Html Helper,我正在使用ASP.NETMVC将HTML视图与模型分离。然而,有一个具体的情况让我有点困惑 我有几个常用的小信息面板,它们本身由一些较小的信息面板组成。它们从各种模型中包含的子类获取数据,有时是单个实例,有时是对象列表 目前,这是使用局部视图完成的,通过模型参数传递适当的数据,例如: @Html.Partial("UserInfo", this.Model.CurrentUser); @Html.Partial("UserInfo", reply.PostedBy); 等等。这一切都很好 我最
@Html.Partial("UserInfo", this.Model.CurrentUser);
@Html.Partial("UserInfo", reply.PostedBy);
等等。这一切都很好
我最近遇到了一个需求,感觉它延伸了这个模型的合理限制,但是-它将涉及大量的局部视图,每个视图中都有少量HTML,嵌套了无数次。页面解析时间似乎开始有点失控,我怀疑搜索和反映部分视图的数量可能与此有关
请注意:我假设仍然要避免重复本应相同的HTML。我可以通过在一些更高级别的控件中添加HTML副本来简化嵌套,但这会损害可维护性
对于最内部的类来说,创建生成并返回所需HTML的静态助手类似乎更有意义——然而,尽管MVC本身使用HTML
helper类来实现这一点,但感觉这与MVC模式背道而驰
- 可以使用静态帮助器类生成小的HTML片段吗?
- 静态
类应该去哪里?意见?控制器?其他地方UserInfo
userInstance.InfoHtml()
类型的方式使用,这似乎使整个方法与向模型中添加helper方法非常相似。这当然是MVC首先想要摆脱的
请注意:我不是想逃避规则或抱怨!我只想尽可能地“按模式”处理这个问题。如果有大量的局部视图,我会坚持使用,并尽我所能调整性能。很难说您的最佳路径是基于这里提供的。这在很大程度上取决于你所从事的工作以及你想要实现的目标 例如,您当前通过部分视图包含的用户信息内容,听起来通过子操作更好:
[Authorize]
public class AccountController : Controller
{
...
[ChildActionOnly]
[AllowAnonymous]
public ActionResult UserInfo()
{
// get your user info here
return PartialView("UserInfo", userInfo);
}
}
然后在视图/布局中:
@Html.Action("UserInfo", "Account")
然后,您不需要确保在使用的任何视图模型上都填充了用户对象
接下来,Razor助手方法,如
Html.Partial
等,本身只是HtmlHelper
或UrlHelper
的扩展,用于Url.
助手。添加自己的扩展方法没有什么错。例如,在将HtmlHelper
烘焙到MVC5开箱即用之前,使用自定义的EnumDropDownList for
扩展它是很常见的。然而,扩展实际上最适合于少量的HTML,这似乎是您想要在这里使用的。对于大的HTML块,使用partials更有意义。不过,这两种方法都有效。在很大程度上,您可以决定什么对您的应用程序最有意义。我相信有四种常见的解决方案可以根据您的需要重用html
@Html.Partial
)李>
@Html.Action
)李>
@Html.Whatever
,@Url.Whatever
,模型的扩展方法等)李>
@helper
)HtmlHelpers
)。共享剃须刀助手驻留在App\u code
文件夹中可能有限制
我认为以下问题将为您提供更多关于如何在两者之间进行选择的信息:
新ASP.NET MVC中可能有第五个解决方案:。据我所知,你可以用它们来代替儿童行为。对于回复缓慢表示歉意-太棒了,谢谢你,这正是我所需要的。我现在正在使用所有这些方法,这取决于所需的数据级别、html/代码平衡等,这使得一切都更加整洁。