MVC模板生成显示每个字段的视图:
<div class="form-group">
@Html.LabelFor(Function(model) model.Name, htmlAttributes:=New With {.class = "control-label col-md-2"})
<div class="col-md-10">
@Html.EditorFor(Function(model) model.Name, New With { .htmlAttributes = New With { .class = "form-control" } })
@Html.ValidationMessageFor(Function(model) model.Name, "", New With { .class = "text-danger" })
</div>
</div>
每个属性都有一个 - 只有属性名称更改 - 以及每种类型实体的一组属性。我想将其置于可重用的局部视图中,但问题是表达式取决于模型类型,并且您不能拥有通用视图。所以我在我的应用程序中有很多这些并且保持它们同步,因为我的样式改变是一种痛苦。
那么我怎么能模块化视图所以我可以像这样传递表达式:
@Html.Partial("Edit Property", Function(model) model.Name)
或者我没有看到这个问题的更一般的解决方案吗?
答案 0 :(得分:0)
使用编辑器模板。我有write up on my blog here,但TL; DR版本适用于每种类型的东西(可以是类型,类或值; DataType
枚举的成员之一;或者虚拟您想通过UIHint
)获得的任何内容,都可以在Views\Shared\EditorTemplates
中创建部分视图。在这些视图中,您可以在使用属性调用Html.EditorFor
时放置您想要呈现的任何HTML。
例如,如果你有一个属性:
public DateTime Foo { get; set; }
您在Views\Shared\EditorTemplates\DateTime.cshtml
添加了以下部分视图:
<div class="form-group">
@Html.Label("", htmlAttributes:=New With {.class = "control-label col-md-2"})
<div class="col-md-10">
@Html.TextBox("", New With { .htmlAttributes = New With { .class = "form-control" } })
@Html.ValidationMessage("", "", New With { .class = "text-danger" })
</div>
</div>
然后,您在视图中所要做的就是:
@Html.EditorFor(m => m.Foo)
将呈现所有HTML。