Почему, когда я 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>
asp.net-mvc
asp.net-mvc-3
layout
razor
Грег Б.
источник
источник
null
на отображаемой странице?Ответы:
У вас есть
_ViewStart.cshtml
в этом каталоге? У меня была та же проблема, что и у вас, когда я пытался использовать _ViewStart. Затем я переименовал его в _mydefaultview, переместил вViews/Shared
каталог и переключился на указание отсутствия представления в файлах cshtml там, где оно мне не нужно, и указание _mydefaultview для остальных. Не знаю, зачем это было нужно, но это сработало.источник
_ViewStart
должен запускаться перед кодом в представлении, поэтому этой проблемы не должно возникнуть. У вас есть что-нибудь необычное в вашем _ViewStart?_ViewStart
. Смотрите мой ответ.Я думаю, что это :
@{ Layout = ""; }
это не то же самое:
@{ Layout = null; }
Я использую второй, и он работает, _Viewstart не включен.
источник
Вы (и КМаллиган) -
_ViewStart
страницы непонимания ._ViewStart
всегда будет выполняться до запуска вашей страницы.Он предназначен для использования для инициализации свойств (например,
Layout
); он вообще не должен содержать разметки. (Поскольку нет возможности отменить его).Правильный шаблон - создать отдельную страницу макета, которая вызывает
RenderBody
, и установитьLayout
свойство, указывающее на эту страницу_ViewStart
.Затем вы можете изменить
Layout
содержание страниц, и изменения вступят в силу.источник
_Layout.cshtml
содержит все основные конструкции. и_ViewStart.cshtml
называет_Layout.cshtml
. каждый модуль моего приложения имеет свою собственную страницу макета, но этот макет использует файл main_Layout.cshtml
. поскольку приложение mvc запускается из viewstart, я думаю, единственным решением было прокомментировать все внутри viewstart. и это не вызывает никаких дополнительных проблем, потому что другие страницы уже использовались_Layout.cshtml
. довольно просто.Я думаю, что лучше работать с отдельными "представлениями", я пытаюсь перейти с PHP на MVC4, это действительно сложно, но я на правильном пути ...
Отвечая на ваш вопрос, если вы будете работать с отдельными страницами, просто отредактируйте _ViewStart.cshtml
@{ Layout = null; }
Еще один совет, если у вас возникли проблемы с путем CSS ...
Поместите "../" перед URL
Это 2 проблемы, с которыми я столкнулся сегодня, и я решаю их таким образом!
С уважением;
источник
Логика для определения того, должно ли представление использовать макет или нет, НЕ должно быть
_viewStart
ни вView
. Установка значения по умолчанию_viewStart
- это нормально, но добавление любой логики макета в view / viewstart предотвращает использование этого представления где-либо еще (с макетом или без него).Ваше действие контроллера должно:
return PartialView()
Помещая этот тип логики в представление, вы нарушаете правило принципа единой ответственности в M (данные), V (визуальный), C (логика).
источник
we could write code within our _ViewStart.cshtml file to programmatically set the Layout property for each View ... we could vary the Layout template that we use depending on what type of device is accessing the site – and have a phone or tablet optimized layout for those devices
Он явно продвигает _viewstart как место, где можно использовать логику для переключения макетов (также упоминаются контроллеры и фильтры действий). Так что вопрос о том, где переключать раскладки, - это больше вопрос предпочтений, а не абсолютов... may or may not (JSON/XML) not even be Html rendered by a View Engine
что не имеет отношения. _Layout - это просто представление, которое обертывает представление. (Не все они начинаются с<!DOCTYPE html>
). Таким образом, вполне возможно, что _ViewStart будет включать и выключать _layouts в зависимости от некоторого свойства, например дня недели. В данном контексте SRP может нарушиться, если ControllerA для ViewA определит, в какую страницу _layout внедрить ViewA, поскольку это выходит за рамки SRP. Он существует только для поддержки ViewA <> ViewModelA.Использование:
@{ Layout = null; }
чтобы избавиться от макета, указанного в _ViewStart.
источник
Просто создайте представление как частичное представление, чтобы не использовать файл макета.
источник
Я хотел отобразить страницу входа без макета, и у меня это работает очень хорошо (это файл _ViewStart.cshtml). Вам нужно установить ViewBag.Title в контроллере.
@{ 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"; }
источник
Если вы работаете с приложениями, попробуйте чистящий раствор. Исправлено для меня.
источник