MVC 3 - Вложенные макеты - разделы не отображаются в областях - PullRequest
10 голосов
/ 25 октября 2011

Проблема:

Учитывая эту вложенную структуру макета:

~/Views/Shared/_layoutBase.cshtml
~/Views/Shared/_layout.cshtml

Где _layoutBase.cshtml - это макет для _layout.cshtml.

Любые разделы, определенные в макетефайлы хорошо отображают свое содержимое на страницах под ~/Views/...

Однако для представлений в области разделы никогда не отображаются.

Настройка:

_layoutBase:

<script type="text/javascript">
        @RenderSection("footerScripts", false)
    </script>
</body>
</html>

_layout.cshtml:

@section footerScripts{
    @RenderSection("footerScripts", false)
}

представление "содержимого":

@section footerScripts{
$(function () {
    SetFocusOnForm("CaptchaCode", "NextButton");
});
}

Содержимое раздела footerScripts никогда не отображается в виде в области.Он отображается в виде в папке ~/Views.

Область _ViewStart.cshtml:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
} 

Вопрос:

Вы видите что-то не так?!

Ответы [ 2 ]

26 голосов
/ 25 октября 2011

Я не могу воспроизвести проблему. Вот мои настройки и шаги, которые я сделал.

  1. Создание нового приложения ASP.NET MVC 3 с использованием шаблона интернет-приложения
  2. Добавить ~/Views/Shared/_LayoutBase.cshtml:

    <!DOCTYPE html>
    <html>
    <body>
    @RenderBody()
    <script type="text/javascript">
        @RenderSection("footerScripts", false)
    </script>
    </body>
    </html>
    
  3. Заменить содержимое ~/Views/Shared/_Layout.cshtml следующим:

    @{
        Layout = "~/Views/Shared/_LayoutBase.cshtml";
    }
    
    @section footerScripts{
        @RenderSection("footerScripts", false)
    }
    
    @RenderBody()
    
  4. Щелкните правой кнопкой мыши по проекту и добавьте область администратора

  5. Добавьте TestController в эту область администратора и добавьте соответствующий ~/Areas/Admin/Views/Test/Index.cshtml view:

    @{
        ViewBag.Title = "Index";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
    
    <h2>Index</h2>
    
    @section footerScripts{
        alert('ok');
    }
    
  6. Запустите приложение и перейдите к /admin/test/index
  7. Отображается предупреждение
7 голосов
/ 26 октября 2011

Причина:

Я встал сегодня утром и сразу увидел проблему:

У меня были блоки @section в частичном представлении. В MVC 3 это НЕ БУДЕТ работать !!

ARGH!

Я действительно ценю усилия Дарина, которые эффективно предоставили доказательство того, что секции работают в областях как и ожидалось. Но настоящая причина была в этом.

Я забыл, что они были в частичном представлении, потому что у меня есть мастер mvc 3, который использует частичные представления для шагов. Он работает так хорошо и последовательно, используя ajax, если javascript доступен, что вы забудете, что делаете.

Пожалуйста, дайте Дарину возможность проголосовать, но это реальный ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...