我如何可以使用自定义@HtmlHelper内的@HtmlHelper?(How can I use

2019-09-29 22:09发布

我试图创建一个自定义的HTML帮助与ASP.NET MVC。 我有以下代码:

@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>
}

显然,@ Html.TextBoxFor不能在助手.cshtml类中被发现。 我可以在其也是.cshtml类的局部视图使用它。

我可以使用@HtmlTextBox但随后我就失去了强大的模型绑定...

为什么会出现这种情况,是有办法得到它的工作?

Answer 1:

不,这是不可能的。 你不能写一个普通的HTML helper@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" }


文章来源: How can I use an @HtmlHelper inside a custom @HtmlHelper?