我正在尝试创建一个帮助器,它将在整个网站中制作我的表单控件
这是我到目前为止使用的
@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)
这使得在一个地方改变整个网站的风格和布局非常容易
现在问题是
我需要为每个模型和数据类型提供帮助
我正在寻找一种让它像这样工作的方法
@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>
}
它应该适用于所有模型和数据类型
答案 0 :(得分:0)
所以基本上你要实现的是一个通用的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(查看{{3} })并将其名称空间添加到WebConfig中的默认名称列表。