Рассмотрим следующую ASP.NET MVC вид бритвой фрагмент, который определяет помощникаПреобразование ASP.NET MVC Razor @helper функционировать в метод вспомогательный класс
@helper FieldFor<TModel>(Expression<Func<TModel, string>> expression)
{
<div class="form-group">
@Html.LabelFor(expression,
htmlAttributes:
new {@class = "control-label col-md-2"})
<div class="col-md-10">
@Html.EditorFor(expression,
new
{
htmlAttributes =
new {@class = "form-control"}
})
@Html.ValidationMessageFor(expression, "",
new {@class = "text-danger"})
</div>
</div>
}
Что такое шаблон для преобразования его в метод из класса похож на:
public static MvcHtmlString FieldFor(this HtmlHelper helper, FieldFor<TModel>(Expression<Func<TModel, string>> expression))
{
/* Method */
}
Все примеры, которые я нашел внимание на создании разметки, которая не опирается на другие HTML-хелперов.
Я думаю, что объявляя его как метод расширения является способ сделать то, что вы хочу (как и вы, выше). В чем проблема? Вы не хотите, чтобы метод расширения возвращал разметку? Если вы ищете регулярные функции для использования в скриптах Razor, вы можете использовать код @functions. Таким образом вы объявляете обычные методы, без необходимости возврата разметки. Я просто не знаю, можно ли создать внешний файл с объявлением кода с использованием «@functions», который будет использоваться в вашем коде Razor где угодно. – Veverke
Нет проблем. Я ищу метод для создания метода @helper для метода расширения с одинаковой функциональностью. В сущности, я хотел бы переместить эти методы расширения в библиотеку классов, где их можно повторно использовать между различными приложениями ASP.NET MVC. – bloudraak
Кажется, у вас уже есть ответ. Я считаю, что все, что нужно сделать, - это создать методы расширения на MvcHtmlString и использовать класс TagBuilder для создания разметки вместо прямого их возврата. Затем ваши методы расширения должны возвращать новую MvcHtmlString (yourTag.toString()). – Veverke