在显示模板中使用 DisplayFor

Oen*_*ria 5 asp.net-mvc asp.net-mvc-3 asp.net-mvc-2

我创建了一个 htmlhelper 扩展来减少创建表单时的重复标记量:

public static MvcHtmlString RenderField<TModel, TValue>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TValue>> expression)
{
    return htmlHelper.DisplayFor(expression, "formfield");
}
Run Code Online (Sandbox Code Playgroud)

这个想法是,在我的视图中,我可以只写@Html.RenderField(x=>x.MyFieldName),它就会打印标签和字段的内容,并div已放置适当的标签。

在 displaytemplates 文件夹中,我创建了 formfield.cshtml,其中包含以下内容:

<div class="display-group">
<div class="display-label">
@Html.LabelFor(x => x)
</div>
<div class="display-field">
@Html.DisplayFor(x => x)
</div>
</div>
Run Code Online (Sandbox Code Playgroud)

不幸的是,似乎不可能将 DisplayFor 嵌套在显示模板中(它不渲染任何内容)。我不想只是使用,@Model因为那样我就不会得到布尔值的复选框、日期的日历控件等。

有没有好的办法解决这个问题?

Tom*_*ler 2

你不能筑巢DisplayFor()。请参阅此处:是否可以在 EditorFor 模板控件中使用 DisplayFor()

你有没有考虑过Html.DisplayForModel()?说明和示例代码可以在这里找到:http://msdn.microsoft.com/en-us/library/ee430907 (v=VS.100).aspx