gpt4 book ai didi

asp.net-mvc - ASP.NET MVC 3 - 部分、显示模板与编辑器模板

转载 作者:行者123 更新时间:2023-12-03 04:00:54 25 4
gpt4 key购买 nike

所以,标题应该不言而喻。

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

部分 View :

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

自定义编辑器模板:

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

自定义显示模板:

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

就实际的 View/HTML 而言,所有三种实现都是相同的:

@model WebApplications.Models.FooObject

<!-- Bunch of HTML -->

所以,我的问题是 - 您何时/如何决定使用三者中的哪一个?

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

这是我发现 EditorFor/DisplayFor 更好的两件事:

  1. 在渲染 HTML 帮助器时,它们尊重模型层次结构(例如,如果您的“Foo”模型上有一个“Bar”对象,则“Bar”的 HTML 元素将使用“Foo.Bar.ElementName”进行渲染,而部分将具有“ElementName”)。

  2. 更强大,例如,如果您有 List<T> ViewModel 中的某些内容,您可以使用 @Html.DisplayFor(model => model.CollectionOfFoo) ,并且 MVC 足够聪明,可以看到它是一个集合并渲染出每个项目的单个显示(而不是 Partial,这需要显式的 for 循环)。

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

有人可以告诉我其他原因吗?有没有比较这三者的列表/文章?

最佳答案

EditorForDisplayFor 很简单。这些方法的语义是(分别)生成编辑/插入和显示/只读 View 。显示数据时(即生成包含模型值的 div 和 span 时),请使用 DisplayFor。编辑/插入数据时(即在表单内生成输入标记时),请使用 EditorFor

上述方法都是以模型为中心的。这意味着他们将考虑模型元数据(例如,您可以使用 [UIHintAttribute][DisplayAttribute] 注释模型类,这将影响选择哪个模板为模型生成 UI。它们通常也用于数据模型(即表示数据库中的行等的模型)

另一方面,Partial 是以 View 为中心的,因为您最关心的是选择正确的部分 View 。 View 不一定需要模型才能正确运行。它可以只有一组通用的标记,可以在整个站点中重复使用。当然,很多时候您希望影响该部分的行为,在这种情况下您可能希望传入适当的 View 模型。

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

最终的选择取决于您在应用程序中建模的内容。还要记住,您可以混合搭配。例如,您可以有一个调用 EditorFor 帮助器的部分 View 。这实际上取决于您的应用程序是什么以及如何对其进行分解以鼓励最大限度地重用代码,同时避免重复。

关于asp.net-mvc - ASP.NET MVC 3 - 部分、显示模板与编辑器模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5037580/

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