Tôi có một hàm trợ giúp Razor để tạo ra một bảng HTML có thể tái sử dụng giúp tôi ghi lại HTML giống nhau nhiều lần.Tạo các thành phần xem HTML có thể tái sử dụng bằng Razor trong 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>
}
Tôi đang tự hỏi, là nó có thể tái sử dụng helper này để điền .panel-content
với HTML hơn để cho phép linh hoạt hơn nữa và tái sử dụng mã - tương tự một cái gì đó như dưới đây:
@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>
}
Trong khi sử dụng .NET MVC, tôi nhận thấy rằng Html.BeginForm()
thực hiện điều tương tự khi bao bọc mã trong tuyên bố @using
trong tuyên bố Html.BeginForm
, như vậy:
@using (Html.BeginForm("Index", "Login", FormMethod.Post))
{
<div>This content gets rendered within the <form></form> markup.</div>
}
Nhưng điều này có thể thực hiện bằng phương pháp @helper
không? Nếu không, có thể tạo phần mở rộng HtmlHelper
để thực hiện tương tự như cách phương thức Html.BeginForm()
không?
Bạn có thể làm một điều rất giống nhau bằng cách sử dụng cú pháp @section
như đã thấy here
Điều này có vẻ giống như một cái gì đó sẽ thực sự hữu ích để có thể làm, và kỳ lạ mà không có cách nào dễ dàng để làm điều đó ở cấp độ thành phần.
Tôi bỏ phiếu cho lựa chọn 2. – MikeSW
Hoàn hảo, thứ hai hoạt động như một sự quyến rũ! Cảm ơn bạn đã dành thời gian để viết một câu trả lời kỹ lưỡng như vậy quá. –
câu trả lời hay. Tôi thích thứ hai. – pixparker