我正在尝试使用ASP.NET MVC创建自定义Html帮助程序。我有以下代码:
@helper DefaultRenderer(Models.Control control)
{
<div class="form-group">
<label class="control-label" for="@control.Name">@control.Label</label>
@Html.TextBoxFor(m => control.Value, new { @class = "form-control" })
</div>
}
显然在Helper .cshtml类中找不到@ Html.TextBoxFor。我可以在部分视图中使用它,它也是一个.cshtml类。
我可以使用@HtmlTextBox,但之后我将失去强大的模型绑定......
为什么会发生这种情况,有没有办法让它发挥作用?
答案 0 :(得分:1)
不,这是不可能的。您无法使用helper
编写普通HTML @Html.TextBoxFor
,因为您的视图是强类型的。
所以你需要这样的东西:
public class HelperExtentions{
public static MvcHtmlString DefaultRenderer<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, Control control , object htmlAttributes)
{
var sb = new StringBuilder();
var dtp = htmlHelper.TextBoxFor(expression, htmlAttributes).ToHtmlString();
sb.AppendFormat("<div class='form-group'><label class='control-label' for='{1}'>{2}</label>{0}</div>", dtp,control.Name,control.Label);
return MvcHtmlString.Create(sb.ToString());
}
}
然后你可以使用:
@html.DefaultRenderer(m => m.Control.Value, Models.Control,new { @class = "form-control" }