Mam funkcję pomocnika Razor, która tworzy panel HTML wielokrotnego użytku, który zapisuje, że piszę ten sam kod HTML w kółko.Tworzenie komponentów widoku HTML wielokrotnego użytku przy użyciu narzędzia Razor w środowisku ASP.NET MVC
@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>
}
Zastanawiam się, czy możliwe jest ponowne użycie tego pomocnika do wypełnienia .panel-content
z większą HTML, aby umożliwić większą elastyczność i ponowne wykorzystanie kodu - podobny coś jak poniżej:
@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>
}
Podczas korzystania z .NET MVC zauważyłem, że Html.BeginForm()
robi podobnie podczas pakowania kodu w deklaracji @using
w deklaracji Html.BeginForm
, tak jak:
@using (Html.BeginForm("Index", "Login", FormMethod.Post))
{
<div>This content gets rendered within the <form></form> markup.</div>
}
Ale czy można tego dokonać przy użyciu metod @helper
? Jeśli nie, czy jest możliwe utworzenie rozszerzenia HtmlHelper
, aby zrobić coś podobnego, jak robi to metoda Html.BeginForm()
?
Można zrobić bardzo podobną rzecz, używając składni @section
jak widać here
To wydaje się czymś, co byłoby bardzo przydatne, aby móc to zrobić, i dziwne, że nie ma łatwy sposób zrób to na poziomie komponentu.
Głosuję na opcję 2. – MikeSW
Doskonały, drugi działa jak czar! Dziękuję za poświęcenie czasu na napisanie tak dokładnej odpowiedzi. –
Dobra odpowiedź. Wolę drugi. – pixparker