J'ai une situation où j'ai besoin d'écrire un Helper HTML pour prolonger un autre helper html. Normalement, l'aide devrait ressembler à ceci.
@Html.TextAreaFor(model => model.Content, new { @class = "some css", @data_bind = "some other stuff..." })
Cela fonctionne bien, mais il doit être enveloppé dans certains autres HTML c'est toujours la même. Je voulais de l'encapsuler pour des raisons de commodité, comme ceci.
public static MvcHtmlString CondensedHelperFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, object htmlAttributes) {
var stringBuilder = new System.Text.StringBuilder();
var tag = new TagBuilder("div"); tag.AddCssClass("some_css");
stringBuilder.Append(toolbar.ToString(TagRenderMode.SelfClosing));
stringBuilder.Append(htmlHelper.TextAreaFor(expression, htmlAttributes));
// more tags and such...
return new MvcHtmlString(stringBuilder.ToString());
}
La ligne stringBuilder.Append(htmlHelper.TextAreaFor...
est ce que je veux changer. La classe CSS qui doit y aller est toujours va être présent. Donc, je préfère l'inclure ici. Cependant, je voudrais être en mesure de spécifier d'autres classes CSS dans le haut-niveau de l'aide. Alors ...
@Html.CondensedHelperFor(model => model.Content, new { @class = "some_other_css" })
Et la statique de la css qui sera toujours là obtenir recouvert par le Helper.
Des idées?