Tôi có một Page.cshtml tương tự như sau (không hoạt động):Có cách nào để tạo tùy chọn @section với asp.net mvc Razor ViewEngine không?
@{
Layout = "../Shared/Layouts/_Layout.cshtml";
var mycollection = (ViewBag.TheCollection as IQueryable<MyCollectionType>);
}
<h2>@ViewBag.Title</h2>
content here
@if (mycollection != null && mycollection.Count() > 0)
{
@section ContentRight
{
<h2>
Stuff
</h2>
<ul class="stuff">
@foreach (MyCollectionType item in mycollection)
{
<li class="stuff-item">@item.Name</li>
}
</ul>
}
}
Như tôi đã nói, điều này không làm việc. Tôi không muốn xác định phần nếu không có gì trong bộ sưu tập. Có cách nào để có một cái gì đó như công việc này? Nếu không, các lựa chọn khác của tôi là gì? Tôi rất mới với Razor ViewEngine này.
Sửa
Trong cách bố trí của tôi, tôi có:
@if(IsSectionDefined("ContentRight"))
{
<div class="right">
RenderSection("ContentRight")
</div>
}
những gì tôi không muốn là div để đầu ra khi phần trống.
Thật không may đó có lẽ là lựa chọn tốt nhất của bạn ngay bây giờ. Một lựa chọn khác có thể là thử và gọi trực tiếp DefineSection, đó là những gì "@section" được dịch xuống. Vấn đề là bạn không thể đặt Markup bên trong một lambda trong Razor v2 (một cái gì đó chúng tôi đang tìm kiếm trong tương lai) vì vậy bạn sẽ phải xác định nội dung của bạn trong một cấu trúc @helper và gọi helper đó từ DefineSection lambda . Cuối cùng, nó có thể kết thúc dễ dàng hơn để làm điều đó theo cách bạn có. Nhưng chúng tôi sẽ xem xét cải thiện điều này trong các phiên bản tương lai! –