Просмотр бритвы без макета

Как получилось, когда у меня есть 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>

Ответ 1

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

Ответ 2

Я думаю:

@{
    Layout = "";
 }

не совпадает с этим:

@{
    Layout = null;
 }

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

Ответ 3

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

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

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

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

Ответ 4

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

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

return PartialView()

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

Ответ 5

Использование:

@{
    Layout = null;
 }

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

Ответ 6

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

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

@{
  Layout = null;
}

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

Поместите "../" перед URL

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

Привет;

Ответ 7

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

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

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

Ответ 8

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

Ответ 9

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

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

 @{
 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.NET MVC является то, что мы можем переопределить рендеринг макета по умолчанию, возвращая макет из ActionResult. Таким образом, это также способ визуализации различного макета в приложении ASP.NET MVC. В следующем примере кода показано, как это можно сделать.

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

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

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

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

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

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

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