ASP.NET MVC 3 - Partial vs Display Template vs Editor Template(部分视图、显示模板和编辑模板的对比)

9 浏览
0 Comments

ASP.NET MVC 3 - Partial vs Display Template vs Editor Template(部分视图、显示模板和编辑模板的对比)

因此,标题应该自己说明问题。

在ASP.NET MVC中创建可重复使用的组件,我们有3个选项(也可能有我没有提到的其他选项):

部分视图:

@Html.Partial(Model.Foo, "SomePartial")

自定义编辑模板:

@Html.EditorFor(model => model.Foo)

自定义显示模板:

@Html.DisplayFor(model => model.Foo)

在实际视图/HTML方面,这三个实现是相同的:

@model WebApplications.Models.FooObject

因此,我的问题是-何时/如何决定使用这三个中的哪一个?

我真正想要的是一个在创建之前要问自己的问题的列表,其答案可以用于决定使用哪个模板。

这里有两件我发现使用编辑器/显示器比较好的事情:

  1. 它们在呈现HTML帮助器时尊重模型层次结构(例如,如果您的“Foo”模型中有一个“Bar”对象,则为“Bar”元素呈现HTML元素,“Foo.Bar.ElementName”,而部分则为“ElementName”)。
  2. 更加健壮,例如,如果您的ViewModel中有一些List,则可以使用@Html.DisplayFor(model => model.CollectionOfFoo),MVC足够聪明,知道它是一个集合并为每个项目呈现单个显示(而不是部分,这需要显式for循环)。

我还听说DisplayFor渲染一个“只读”模板,但我不明白-我不能把一个表单扔上去吗?

能否有人告诉我其他原因?有没有比较这三个的列表/文章?

admin 更改状态以发布 2023年5月23日
0
0 Comments

你当然可以定制DisplayFor以展示可编辑的表单。但是约定是DisplayFor应该是只读的,而EditorFor则用于编辑。遵循约定能确保无论你传入什么参数给DisplayFor,它都会执行相同的操作。

0
0 Comments

EditorForDisplayFor 的区别很简单。这两个方法的语义是分别生成编辑/插入和展示/只读的视图。当展示数据时(例如生成包含模型值的 div 和 span 元素时),使用 DisplayFor;当编辑/插入数据时(例如在表单内生成 input 标签时),使用 EditorFor

以上两个方法都是以模型为中心的。这意味着它们会考虑模型元数据(例如,您可以使用 [UIHintAttribute][DisplayAttribute] 注解模型类,并选择哪个模板来为模型生成用户界面)。它们通常用于数据模型(例如代表数据库行等模型)。

另一方面,Partial 以视图为中心,主要关注选择正确的局部视图。该视图并不一定需要一个模型才能正确运行。它只需具有网站中重用的一个常见标记集即可。当然,通常情况下您想要影响该局部视图的行为,因此您可能需要传递一个适当的视图模型。

您并没有询问 @Html.Action,它也值得在这里提及。您可以将它视为 Partial 的更强大版本,因为它执行控制器子操作,然后呈现一个视图(通常是局部视图)。这很重要,因为子操作可以执行更多不属于局部视图的业务逻辑。例如,它可以表示购物车组件。使用它的原因是避免在应用程序的每个控制器中执行购物车相关的工作。

最终选择取决于您在应用程序中模拟的内容。还要记住,您可以混合和匹配使用。例如,您可以创建一个调用 EditorFor 助手的部分视图。这确实取决于您的应用程序以及如何将其因素化以鼓励最大限度的代码重用,同时避免重复。

0