繁体   English   中英

ASP.NET MVC @ Html.LabelFor(model => model.Name)Helper

[英]ASP.NET MVC @Html.LabelFor(model => model.Name) Helper

我正在尝试创建一个帮助程序,它将在整个网站中进行表单控件

这是我到目前为止使用的

@helper editorField(System.Linq.Expressions.Expression<Func<Model, String>> o)
{
    <div class="form-group">
        @Html.LabelFor(o, new { @class = "col-md-4 control-label" })
        @Html.ValidationMessageFor(o, "", new { @class = "col-md-6 col-xs-12  text-errer" })
        <div class="col-md-5">
            @Html.TextBoxFor(o, new { @class = "form-control" })
        </div>
    </div>
}

而我使用它的方式是

        @editorField(model => model.Name)
        @editorField(model => model.Email)
        @editorField(model => model.PhoneNumber)

这使得在一个地方改变整个网站的风格和布局变得非常容易

现在这是问题所在

我需要为每个Model和数据类型提供帮助

我正在寻找一种让它像这样工作的方法

@helper editorField(object o)
{
        <div class="form-group">
            @Html.LabelFor(o, new { @class = "col-md-4 control-label" })
            @Html.ValidationMessageFor(o, "", new { @class = "col-md-6 col-xs-12  text-errer" })
            <div class="col-md-5">
                @Html.TextBoxFor(o, new { @class = "form-control" })
            </div>
        </div>
}

它应该适用于所有模型和数据类型

所以基本上你要实现的是一个通用的HTML帮助器。 不幸的是,Razor视图中不直接支持这些。 但是,您可以使用此解决方法:

@functions
{
    public HelperResult PasteEditorFor<TModel, TItem>(HtmlHelper<TModel> html, Expression<Func<TModel, TItem>> expr)
    {
        return editorField(
            html.LabelFor(expr, new { @class = "col-md-4 control-label" }), 
            html.ValidationMessageFor(expr, "", new { @class = "col-md-6 col-xs-12  text-errer" }), 
            html.TextBoxFor(expr, new { @class = "form-control" }));
    }
}

@helper editorField(MvcHtmlString label, MvcHtmlString validationMessage, MvcHtmlString textBox)
{
     <div class="form-group">
         @label
         @validationMessage
         <div class="col-md-5">
            @textBox
         </div>
     </div>
 }

// usage sample
@PasteEditorFor(Html, m => m.LongDescription)

但是因为它仍然不容易重复使用(目前还不能告诉我如何让它在所有视图中都可见),所以我建议你用通常的静态类语法编写通常的HtmlHelper(查看Alundra的dreamwalker评论)并添加它是WebConfig中默认列表的命名空间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM