2017-05-08 60 views
1

我想用ASP.NET MVC創建一個自定義的Html幫助器。我有以下代碼:如何在自定義@HtmlHelper中使用@HtmlHelper?

@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無法在Helper .cshtml類中找到。我可以在部分視圖中使用它,這也是一個.cshtml類。

我可以使用@HtmlTextBox但隨後我就失去了強大的模型綁定...

爲什麼會這樣,是有辦法得到它的工作?

回答

1

不,這是不可能的。您無法使用@Html.TextBoxFor編寫普通的HTML helper,因爲您的視圖是強類型的。 所以,你需要這樣的東西:

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