减少Asp.net MVC Razor视图中的重复

时间:2012-01-01 08:17:42

标签: asp.net-mvc-3 razor

我正在使用ASP.NET MVC创建LOB业务应用程序。在我的观点中,我发现这种模式重复了很多:

<div class="editor-label">
    @Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.Name)
    @Html.ValidationMessageFor(model => model.Name)
</div>

必须有可能编写一个帮助程序来将其减少到这样的程度:

@EditorForField(model => model.Name)

这将使视图更简单,并且可以更轻松地将表单布局更改为基于表格的布局(如果需要)

任何想法如何制作这样的辅助方法?

谢谢!

1 个答案:

答案 0 :(得分:2)

我能够通过这段代码完成这项工作:

public static class HelperExtensions
{
    public static MvcHtmlString EditorForField<TModel, TValue>(
        this HtmlHelper<TModel> html, 
        Expression<Func<TModel, TValue>> expression)
    {
        const string template = @"<div class=""editor-label"">{0}</div><div     class=""editor-field"">{1}{2}</div>";

        string markup = string.Format(template, 
            html.LabelFor(expression), 
            html.EditorFor(expression),
            html.ValidationMessageFor(expression));

        return new MvcHtmlString(markup);
    }
}

在您的视图中:

@Html.EditorForField(model => model.Name)