我需要做这样的事情:
<div class="editor-field">
@Html.EditorFor(model => model.A1)
@Html.ValidationMessageFor(model => model.A1)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.A2)
@Html.ValidationMessageFor(model => model.A2)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.A3)
@Html.ValidationMessageFor(model => model.A3)
</div>
我正在使用MVC3和对我来说很新的 Razor View 引擎。我想做的是避免用A1,A2,A3,A4 ... A20重复同一行的四行。有什么方法可以使用帮助程序,模板或其他功能来完成此任务,因此不必重复很多行代码。
最佳答案
一种选择是使用局部 View ,例如@Ufuk提及。
IMO的一种更好的方法是使用编辑器模板,并利用MVC的内置约定。
而不是具有A1,A2等的单个属性,而是将它们放在IEnumerable<Something> Somethings
中。
然后在您的 View 中执行此操作:@Html.EditorFor(model => model.Somethings)
然后创建一个名为Something.cshtml
的编辑器模板,并将其放在Shared\EditorTemplates
中,MVC将为每个循环做一个“隐式”操作,并渲染该模型的编辑器模板中的内容:
<div class="editor-field">
@Html.EditorForModel()
@Html.ValidationMessageForModel()
</div>
不要使用foreach循环-这是不必要的和可避免的代码汤。
编辑器模板HTML与部分,强类型和全部相同。区别在于查找文件的约定,而部分 View 则需要显式的部分 View 名称。
这意味着如果您更改模型的类型,它将基于模型类型查找该模板,从而允许使用非常强大的基于约定的方法-这就是MVC的全部作用。
关于asp.net-mvc - 有没有办法避免我在MVC Razor View 中重复代码?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5714704/