Замена для @helper в ASP.NET 5/asp.net mvc 6

Я большой поклонник продвижения и изменений. Мне ясно, что команда ASP.NET MVC убила одну из самых ценных функций веб-страниц (@helper), независимо от того, что кто-то думает. Если вы должны что-то удалить, замените его на что-то подобное по функциональности и использованию. До сих пор я не думаю, что ViewComponent решает, что не имеет значения TagHelper. Есть ли замена на это? Что-то, что принимает параметры и возвращает HtmlString.

Нет пакета Nuget в любом месте?

Некоторые люди называют это хорошим улучшением. Я полностью и решительно откладываю это мнение.

Я не вижу ничего вредного:

@helper foo(string something){
     <div>Say @something</div>
}

var emailbody = classfilenameinAppCodefolder.foo("hello"); //store result in a variable for further processes

Что бы вы могли удалить такую ​​ценную функцию? Что вы можете заменить?

Теперь я считаю, что это временное удаление перед RC. https://github.com/aspnet/Razor/issues/281 и https://github.com/aspnet/Mvc/issues/1130 Хорошо!!! лучше быть. Надеюсь, кто-то работает над этим. Без @helper создание больших HtmlString или 'template' будет серьезной болью.

Примечание. Частичный вид, похоже, не делает этого. Я думаю, что это только делает представления не возвращать вид переменной

Во-вторых,, что случилось с папкой App_Code?

Ответ 1

@{
    Func<String, IHtmlContent> foo = @<div>Say @item</div>;
}

Ответ 2

Директива @helper была удалена, так как она была неполной и ее текущий дизайн не вписывался в новый "способ ASP.NET 5", Одна из причин заключается в том, что помощники должны быть объявлены в папке App_Code, в то время как ASP.NET 5 не имеет понятия специальных папок. Поэтому команда решила временно удалить эту функцию.

Есть планы вернуть его в будущем, хотя. См. this и this.

Ответ 3

Я хотел бы расширить ответ @Alexaku и показать, как я реализовал вспомогательную функцию. Это полезно только на одной конкретной странице, но позволяет несколько раз выполнять фрагмент кода бритвы с входными параметрами. Синтаксис невелик, но я нашел его очень полезным в отсутствие функции бритвы @helper. Сначала объявите какое-то Dto, которое будет содержать входные параметры в функцию.

@functions {
   private class Dto
   {
      public string Data { get;set; }
   }
}

Затем объявите функцию бритвы. Обратите внимание, что значение displayItem может быть многострочным, а также обратите внимание, что вы получаете доступ к переменной Dto с помощью @item.

@{
   Func<Dto, IHtmlContent> displayItem = @<span>@item.Data</span>;
}

Затем, когда вы хотите использовать шаблон бритвы, вы можете называть его следующим образом из любого места на странице.

<div>
   @displayItem(new Dto {Data = "testingData1" });
</div>
<div>
   @displayItem(new Dto {Data = "testingData2" });
</div>