التخرف في قسم في عرض الحلاقة
-
25-09-2019 - |
سؤال
هذا هو الموقف الذي أحاول حله:
لديّ تخطيط مشترك رئيسي مع قسم واحد @Rendersection ("القائمة") أريد افتراضيًا في قائمة قياسية لغالبية صفحاتي ، لكنني أود استبدال/تجاوز هذا القسم في بضع صفحات فرعية. هل هذا ممكن مع الحلاقة في هذه المرحلة من اللعبة؟
كنت آمل أن أتمكن من تحديد التنفيذ الافتراضي لهذا القسم في _viewstart.cshtml ولكن لا يبدو أنه يعجبه.
هل ستكون القائمة الجزئية أفضل لهذا الموقف؟
يحرر:
أحصل على الخطأ التالي مع هذا الرمز الآن: تم تعريف الأقسام التالية ولكن لم يتم تقديمها لصفحة التخطيط "~/views/shared/_layout.cshtml": "القائمة".
_layout.cshtml
<div id="menu">
@if (IsSectionDefined("menu"))
{
RenderSection("menu");
}
else {
<text>
<ul>
<li>@Html.ActionLink("Home", "Index", "Home")</li>
<li><a href="#">Lookups</a>
<ul>
@Html.ActionLink("Product","Index","Product")
</ul>
</li>
</ul>
</text>
}
</div>
index.cshtml
@section menu {
<ul>
<li>@Html.ActionLink("Product", "Index", "Product")</li>
<li>@Html.ActionLink("Form Type", "Index", "Product")</li>
<li>@Html.ActionLink("Supplier", "Index", "Product")</li>
</ul>
}
المحلول
آه ... كنت أتعامل مع هذا ووجدت أنه يمكنني فعل ذلك بمجرد تبديل المنطق حوله:
@RenderSection("Header", false)
@if (!IsSectionDefined("Header")) {
<header>
Default Header!
</header>
}
لذلك إذا لم تحدد صفحاتي @section Header { ... }
, ، فإنه يجعل الافتراضي.
نصائح أخرى
ال IsSectionDefined
يجب أن تناسب الطريقة احتياجاتك:
@if(IsSectionDefined("Menu")) {
@RenderSection("Menu")
} else {
<text>
Default Menu Content.
</text>
}
تحديث: لقد كتبت منشور مدونة لتوضيح الخيارات المتاحة بشكل أفضل: http://blogs.msdn.com/b/marcinon/archive/2010/12/08/optional-razor-sections-with-default-content.aspx
أستخدم حاليًا تخطيطات متعددة لتحقيق هذا السيناريو نفسه بالضبط.
/views/shared/_layout.cshtml
<html>
...
<body>
<div id="menu">@RenderSection("Menu", required:false)</div>
...
@RenderBody()
...
</body>
</html>
/views/shared/_layoutwithdefaultmenu.cshtml
@{ Layout = "~/Views/Shared/_Layout.cshtml"; }
@section Menu { @Html.Partial("Menu") }
@RenderBody()
/views/_viewstart.cshtml
@{ Layout = "~/Views/Shared/_LayoutWithDefaultMenu.cshtml"; }
ما يعنيه هذا هو أنه ، بشكل افتراضي ، تحصل جميع وجهات النظر الخاصة بي على التخطيط باستخدام قائمة افتراضية. ومع ذلك ، على أساس عرض على حدة ، يمكنني ضبط التصميم على _Layout.cshtml
ثم تنفيذ @section Menu
نفسي.