Ken*_*nny 8 asp.net-mvc razor asp.net-mvc-3
我需要做这样的事情:
<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>
Run Code Online (Sandbox Code Playgroud)
我正在使用MVC3和剃刀视图引擎,这对我来说是新的.我想要做的是避免重复A1,A2,A3,A4 ... A20的同一块四行.有没有什么方法可以使用帮助器,模板或其他一些功能来实现它,所以我不必重复多行代码.
RPM*_*984 12
一种选择是使用像@Ufuk提及的部分视图.
IMO更好的方法是使用编辑器模板,利用MVC的内置约定.
而不是A1,A2等的单一属性.把它们放在一个IEnumerable<Something> Somethings.
然后在您的视图中执行此操作:
@Html.EditorFor(model => model.Somethings)
然后创建一个调用的编辑器模板Something.cshtml并将其放入Shared\EditorTemplates,MVC将为每个循环执行"隐式"操作,并渲染模型的编辑器模板中的任何内容:
<div class="editor-field">
@Html.EditorForModel()
@Html.ValidationMessageForModel()
</div>
Run Code Online (Sandbox Code Playgroud)
不要使用foreach循环 - 这是不必要的和可避免的代码汤.
编辑器模板HTML与部分,强类型和全部相同.不同之处在于查找文件的约定,而部分视图需要显式的部分视图名称.
这意味着如果你改变模型的类型,它将根据模型类型寻找那个模板,允许一个非常强大的基于约定的方法 - 这就是MVC的全部内容.
创建一个强类型的部分视图.
A_Partial.ascx
<div class="editor-field">
@Html.EditorFor(model)
@Html.ValidationMessageFor(model)
</div>
Run Code Online (Sandbox Code Playgroud)
然后为每个对象渲染它们.
@Html.Partial("A_Partial", model.A1)
@Html.Partial("A_Partial", model.A2)
@Html.Partial("A_Partial", model.A3)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1970 次 |
| 最近记录: |