Бритва Вид Без Макета
как же так, когда у меня есть 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 ответов:
У вас есть _viewstart.cshtml в этом каталоге? У меня была та же проблема, что и у вас, когда я попытался использовать _viewstart. Затем я переименовал его _mydefaultview, переместил его в каталог views/shared и переключился на указание no view в файлах cshtml, где я этого не хочу, и указание _mydefaultview для остальных. Не знаю, почему это было необходимо, но это сработало.
Я думаю, что это :
@{ Layout = ""; }
это не то же самое, что это :
@{ Layout = null; }
Я использую второй и он работает, не включенными _Viewstart.
вы (и KMulligan) недопонимание
_ViewStart
страницы.
_ViewStart
будет всегда выполнить, прежде чем начнется ваша страница.
Он предназначен, чтобы использоваться, чтобы инициализировать свойства (например,Layout
); Он вообще не должен содержать разметку. (Так как нет никакого способа, чтобы переопределить его).правильный шаблон состоит в том, чтобы сделать отдельную страницу макета, которая вызывает
RenderBody
и выберитеLayout
свойство указывать на эту страницу в_ViewStart
.вы затем можно изменить
Layout
на страницах содержание, и изменения вступят в силу.
логика для определения того, Должен ли вид использовать макет или нет, не должно быть в
_viewStart
, ниView
. Установка значения по умолчанию в_viewStart
отлично, но добавление любой логики макета в представлении/viewstart предотвращает использование этого представления в любом другом месте (с макетом или без него).ваше действие контроллера должно:
return PartialView()
поставив этот тип логики в представлении вы нарушаете принцип единой ответственности правила в М (данные), V (визуальные), C (логические).
Я думаю, что лучше работать с отдельными "представлениями", я пытаюсь перейти от PHP к MVC4, это действительно сложно, но я на правильном пути...
отвечая на ваш вопрос, если вы будете работать с отдельными страницами, просто отредактируйте _ViewStart.cshtml
@{ Layout = null; }
еще один совет, если вы получаете некоторые проблемы с CSS path...
Put "../ "перед url
Это 2 проблемы, которые я получаю сегодня, и я решаю таким образом!
С уважением;
Я хотел отобразить страницу входа без макета, и это работает довольно хорошо для меня.(это _ViewStart.cshtml файл ) Вам нужно установить ViewBag.Название в контроллере.
@{ if (! (ViewContext.ViewBag.Title == "Login")) { Layout = "~/Views/Shared/_Layout.cshtml"; } }
Я знаю, что это немного поздно, но я надеюсь, что это помогает некоторым телом.
процедура 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.NET MVC - это то, что мы можем переопределить отрисовку макета по умолчанию, вернув макет из 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"; }