У меня есть ситуация, когда мне нужно написать помощник HTML, чтобы расширить другой помощник HTML. Обычно помощник будет выглядеть следующим образом.
@Html.TextAreaFor(model => model.Content, new { @class = "some css", @data_bind = "some other stuff..." })
Это прекрасно работает, но его нужно заключить в какой-то другой HTML, который всегда одинаков. Я хотел заключить его в капсулу для удобства, вот так.
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());
}
Строка stringBuilder.Append(htmlHelper.TextAreaFor...
- это то, что я хочу изменить. Класс CSS, который должен идти туда, будет присутствовать всегда . Поэтому я бы предпочел включить это здесь. Однако я хотел бы иметь возможность указывать дополнительные классы CSS в помощнике верхнего уровня. Итак ...
@Html.CondensedHelperFor(model => model.Content, new { @class = "some_other_css" })
И статический css, который всегда будет там, будет скрыт через Помощника.
Есть идеи?