У меня есть вспомогательная функция 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
, как показано здесь
Это похоже на то, что было бы действительно полезно, чтобы быть в состоянии сделать, и странно, что нет простого способа сделать это на уровне компонентов.