Возможно, вам повезет с этим.
Обратите внимание, что вы должны найти себе парит над TextBoxFor и нажав F12 в Visual Studio и вы получите сигнатуру метода, который вы пытаетесь подражать. Это хорошее место для начала, хотя немного читать трудно, если вы не тратите время.
public static MvcHtmlString SwitchFor<TModel>(
this HtmlHelper<TModel> helper, Expression<Func<TModel,
Object>> expression, Boolean wrap)
{
return wrap
? MvcHtmlString.Create(String.Format("<div class='helloworld'>{0}</div>",
helper.TextAreaFor(expression))) : helper.TextAreaFor(expression);
}
Пропустите Right Stuff
Вам нужно пройти Expression к расширения TextBoxFor. Подпись метода для m => - Func, которая передает вашу функцию TModel (m) и возвращает объект.
делать то, что вы хотите и Возвратить реализацию по умолчанию
Вы можете положить что-нибудь там. Вы можете видеть, что я просто возвращаю исходный вызов метода, передавая выражение, если для wrap установлено значение false.
сделать вызов
Все, что осталось сделать, это вызов, как вы намеревались в первую очередь.
@(Html.SwitchFor(m => m.Data, true))
Сделать стартовой Helper
Это немного сложнее, чем я первый ожидал, но это может быть сделано, просто добавьте следующий код в ваш папку App_Code в cshtml файл твой выбор.Поскольку вы не можете использовать Generics в функциях помощников, вам необходимо создать реальную функцию с правильной подписью в блоке @function {}.
@using System.Linq.Expressions
@using System.Web.Mvc;
@using System.Web.Mvc.Html;
@functions
{
public static HelperResult SwitchFor<TModel, Object>(HtmlHelper<TModel> html, Expression<Func<TModel, Object>> func, Boolean wrap)
{
var data = html.TextAreaFor(func);
return WrapItUp(data);
}
}
@helper WrapItUp(MvcHtmlString data)
{
<div class="helloworld">
@(data)
</div>
}
сделать вызов, ну почти
Вы должны пройти экземпляр HtmlHelper, введенный в вашей модели.
@(Html.SwitchFor(Html, m => m.Data, true))
Кстати, Это здорово! Это поможет мне с выделением многоколоночных форм более естественным образом. Я рад, что наткнулся на ваш вызов, потому что это решение, о котором я не думал сам.
Удачи вам весело!