Бритва Вид Без Макета


как же так, когда у меня есть 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 55

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 проблемы, которые я получаю сегодня, и я решаю таким образом!

С уважением;

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

@{
    Layout = null;
 }

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

Я хотел отобразить страницу входа без макета, и это работает довольно хорошо для меня.(это _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";
}