【发布时间】:2015-02-25 17:00:53
【问题描述】:
我正在使用 ASP.NET MVC 将我的 HTML 视图与我的模型分开。但是有一个具体的情况让我有点困惑。
我有几个常用的小信息面板,它们本身由许多较小的信息面板组成。它们从包含在各种模型中的子类中获取数据,有时是单个实例,有时是对象列表。
目前这是使用部分视图完成的,通过模型参数传递适当的数据,例如:
@Html.Partial("UserInfo", this.Model.CurrentUser);
@Html.Partial("UserInfo", reply.PostedBy);
等等。这一切都很好。
我最近遇到了一个要求,但感觉好像它扩展了这个模型的合理限制——它将涉及大量的局部视图,每个视图中只有少量的 HTML,并且嵌套了很多次。页面解析时间似乎开始有点失控,我怀疑搜索和反映部分视图的数量可能与此有关。
请注意: 我假设仍然要避免重复应该相同的 HTML。我可以通过在一些更高级别的控件中添加 HTML 副本来简化嵌套,但我觉得这会损害可维护性。
对于最内部的人来说,创建静态帮助程序类来生成和返回所需的 HTML 似乎更有意义 - 然而,尽管 MVC 本身使用 Html 帮助程序类来完成它,但感觉就像这违反了 MVC 模式。
- 可以使用静态帮助类生成小的 HTML sn-ps 吗?
- 静态
UserInfo类应该去哪里?意见?控制器?其他地方?
显然,这种方法仍然将辅助方法与模型分开,但由于它需要一个模型来处理,我真的看不出它的解耦程度。
静态助手与扩展方法相差甚远,可以userInstance.InfoHtml() 类型的方式使用,这似乎使整个方法与仅将助手方法添加到模型中非常相似。这当然是 MVC 一开始就试图摆脱的!
请注意:我不是想偷偷摸摸地规避规则或抱怨!我只是想尽可能地将其视为“模式”。如果有大量的局部视图,我会尽可能地坚持这一点并调整性能。
【问题讨论】:
标签: c# asp.net-mvc asp.net-mvc-4 html-helper