سؤال

هذا هو الموقف الذي أحاول حله:

لديّ تخطيط مشترك رئيسي مع قسم واحد @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 نفسي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top