У меня есть вспомогательная функция Razor, которая создает повторно используемую HTML-панель, которая позволяет мне писать один и тот же HTML снова и снова.
@helper DefaultPanel(string panelTitle) {
<div class="panel">
<div class="panel-logo"><img src="/logo.png"></div>
<div class=panel-inner">
<p class="panel-title">@panelTitle</p>
<div class="panel-content">
/* Can I pass content to be rendered in here here? */
</div>
</div>
</div>
</div>
}
Мне интересно, возможно ли повторное использование этого помощника, чтобы заполнить .panel-content большим количеством HTML, чтобы обеспечить дополнительную гибкость и повторное использование кода - похожее на что-то вроде ниже:
@LayoutHelpers.DefaultPanel("Welcome back") {
<div class="panel-content-inner">
<p>Welcome back, please select from the following options</p>
<a href="#">Profile</a>
<a href="#">My Defails</a>
</div>
}
Во время использования .NET MVC я заметил, что Html.BeginForm() делает аналогичную вещь при обертке кода внутри оператора @using в объявлении Html.BeginForm, например:
@using (Html.BeginForm("Index", "Login", FormMethod.Post))
{
<div>This content gets rendered within the <form></form> markup.</div>
}
Но можно ли это сделать с помощью методов @helper? Если нет, возможно ли создать расширение HtmlHelper для выполнения аналогичной вещи, как это делает метод Html.BeginForm()?
Вы можете сделать очень похожие вещи, используя синтаксис @section, как показано здесь

Это похоже на то, что было бы действительно полезно, чтобы быть в состоянии сделать, и странно, что нет простого способа сделать это на уровне компонентов.