Бритва вид без макета - PullRequest
64 голосов
/ 07 июля 2011

Почему у меня Layout = null; в моем представлении - оно по-прежнему тянет в макете по умолчанию?!

Есть какой-то трюк, чтобы остановить это?

Вот мой взгляд без макета:

@{
    Layout = "";
}

<!DOCTYPE html>

<html>
<head>
    <title>Index</title>
    @{Html.RenderAction("Head", "Header");}
</head>
<body>
    <div>
        Home
    </div>
</body>
</html>

Вот обработанный вывод !!

<!DOCTYPE html>

<html>
<head>
    <title>Index</title>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <link href="/Content/Site.css" rel="stylesheet" type="text/css" />
    <script src="/Scripts/jquery-1.5.1.min.js" type="text/javascript"></script>
    <script src="/Scripts/modernizr-1.7.min.js" type="text/javascript"></script>
</head>

<body>
    header
</body>
</html>
</head>
<body>
    <div>
        Home
    </div>
</body>
</html>

Ответы [ 9 ]

113 голосов
/ 16 июля 2013

Я думаю, что это:

@{
    Layout = "";
 }

не то же самое, что и это:

@{
    Layout = null;
 }

Я использую второе, и оно работает, без _Viewstart.

32 голосов
/ 07 июля 2011

Вы (и KMulligan) неправильно понимаете _ViewStart страниц.

_ViewStart выполнит всегда , прежде чем ваша страница запустится.
Она предназначена для инициализациисвойства (такие как Layout);обычно он не должен содержать разметки.(Поскольку переопределить его невозможно).

Правильный шаблон - создать отдельную страницу макета, которая вызывает RenderBody, и задать для свойства Layout указание на эту страницу в _ViewStart.

Затем вы можете изменить Layout на своих страницах контента, и изменения вступят в силу.

15 голосов
/ 27 марта 2014

Логика для определения, должен ли вид использовать макет или нет, НЕ должен быть ни в _viewStart, ни в View.Установка значения по умолчанию в _viewStart - это хорошо, но добавление любой логики макета в представление / представление запуска не позволяет использовать это представление где-либо еще (с макетом или без).

Ваше действие контроллера должно:

return PartialView()

Поместив этот тип логики в представление, вы нарушаете правило Принцип единой ответственности в M (данные), V (визуальное), C (логика).

14 голосов
/ 27 марта 2014

Я думаю, что лучше работать с отдельными "представлениями", я пытаюсь перейти с PHP на MVC4, это действительно сложно, но я на правильном пути ...

Отвечая на ваш вопрос, если вы будете работатьотдельные страницы, просто отредактируйте _ViewStart.cshtml

@{
  Layout = null;
}

Еще один совет, если у вас возникают проблемы с путями CSS ...

Поставьте "../" перед URL

Это две проблемы, с которыми я сталкиваюсь сегодня, и я решаю их таким образом!

С уважением;

9 голосов
/ 20 июля 2016

Используйте:

@{
    Layout = null;
 }

, чтобы избавиться от макета, указанного в _ViewStart.

9 голосов
/ 07 июля 2011

У вас есть _viewstart.cshtml в этом каталоге?У меня была та же проблема, что и у вас, когда я пытался использовать _viewstart.Затем я переименовал его в _mydefaultview, переместил в каталог views / shared и переключился на указание отсутствия представления в файлах cshtml, где он мне не нужен, и указание _mydefaultview для остальных.Не знаю, почему это было необходимо, но это сработало.

3 голосов
/ 03 июня 2016

Я хотел отобразить страницу входа без макета, и для меня это работает довольно хорошо (это файл _ViewStart.cshtml). Вам необходимо установить ViewBag.Title в контроллере.

@{
    if (! (ViewContext.ViewBag.Title == "Login"))
    {
        Layout = "~/Views/Shared/_Layout.cshtml";        
    } 
}

Я знаю, что уже немного поздно, но я надеюсь, что это поможет телу.

1 голос
/ 29 августа 2017

Процедура 1: Управление рендерингом макетов с помощью файла _ViewStart в корневом каталоге папки Views

Этот метод является самым простым способом для начинающих контролировать рендеринг макетов в ASP.NET.Приложение MVC.Мы можем идентифицировать контроллер и визуализировать макеты как контроллер par, для этого мы можем записать наш код в файл _ViewStart в корневом каталоге папки Views.Ниже приведен пример, показывающий, как это можно сделать.

 @{
 var controller = HttpContext.Current.Request.RequestContext.RouteData.Values["Controller"].ToString();
 string cLayout = "";
 if (controller == "Webmaster") {
 cLayout = "~/Views/Shared/_WebmasterLayout.cshtml";
 }
 else {
 cLayout = "~/Views/Shared/_Layout.cshtml";
 }
 Layout = cLayout;
 }

Процедура 2. Установка макета путем возврата из ActionResult

Одна из замечательных возможностей ASP.NETMVC заключается в том, что мы можем переопределить рендеринг макета по умолчанию, возвращая макет из ActionResult.Таким образом, это также способ визуализации различных макетов в приложении ASP.NET MVC.В следующем примере кода показано, как это можно сделать.

public ActionResult Index()
{
 SampleModel model = new SampleModel();
 //Any Logic
 return View("Index", "_WebmasterLayout", model);
}

Процедура 3: Просмотр по макету (определив расположение в каждом представлении сверху)

ASP.NET MVC предоставляет нам такую ​​замечательную функцию и возможность отправки факсов для переопределения рендеринга макета по умолчанию путем определения макета в представлении.Для реализации этого мы можем написать наш код следующим образом в каждом представлении.

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

Процедура 4: Размещение файла _ViewStart в каждом из каталогов

Этоочень полезный способ установить разные макеты для каждого контроллера в приложении ASP.NET MVC.Если мы хотим установить макет по умолчанию для каждого каталога, мы можем сделать это, поместив файл _ViewStart в каждый из каталогов с необходимой информацией о макете, как показано ниже:

@{
  Layout = "~/Views/Shared/_WebmasterLayout.cshtml";
}
1 голос
/ 06 августа 2013

Просто создайте представление как частичное, чтобы файл макета не использовался.

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