Отключить макет в ASP.NET MVC?

В MonoRail вы можете просто CancelLayout (), чтобы не отображать макет. В ASP.NET MVC единственный способ повлиять на макет - это передать имя макета в метод View (), например View («myview», «mylayout»); только кажется, что передача null или пустой строки не дает того, что я хотел бы.

В итоге я создал пустой макет, который просто отображал контент, но это кажется глупым.

«Не отображать макет» означает именно это. В механизме просмотра веб-форм они называют макеты «главными страницами». Я хочу отобразить только представление моего действия, а не окружать его главной страницей.


person Aaron Jensen    schedule 20.10.2008    source источник
comment
Если вы не можете точно объяснить, что ищете, других ответов вы не получите. Что вы имеете в виду, говоря, что макет не отображается?   -  person    schedule 21.10.2008
comment
Создание пустого макета может показаться глупым, но как еще движок веб-форм узнает, как упорядочивать разделы содержимого asp.net? Я считаю, что это больше проблема движка просмотра веб-форм, который у вас есть.   -  person Min    schedule 08.05.2009


Ответы (10)


В MVC 3 вы можете удалить основной код макета с помощью:

   @{
    Layout = "";    
    }
person expdiant    schedule 18.01.2011
comment
это в представлении? по-прежнему нет возможности сделать это с контроллера? Не то чтобы меня это больше волновало, просто забавно :) - person Aaron Jensen; 27.04.2011

В начале просмотра добавьте это:

@{
    Layout = null;
}

Если вы хотите, чтобы таблица стилей оставалась, вам нужно добавить ссылку на нее в этом представлении.

person berzinsu    schedule 13.04.2012
comment
Это работает в представлении Razor, но не в контроллере, как первоначально спросил Аарон. - person John Washam; 12.09.2013

Чтобы отключить это для всех страниц, отредактируйте _ViewStart.cshtml (в корне, в папке «Просмотры») и убедитесь, что он содержит следующее:

@{
  Layout = null;
}

А чтобы включить шаблон для любого конкретного представления, в файл .cshtml для этого представления можно добавить следующее, чтобы включить шаблон:

@{
  Layout = "~/Views/Shared/_Layout.cshtml";
}
person Chris Halcrow    schedule 26.01.2016

В действии «Контроллер» мы можем установить требуемый макет.

return View("Index", "_LAYOUT_NAME", model);

https://stackoverflow.com/a/5161384/2039603

person TomCat    schedule 07.11.2014

Я вижу, что в правильном ответе говорится: «Кажется, это было невозможно в версии ASP.NET MVC».

Какую версию вы используете? Потому что я нашел решение (у меня была такая же проблема) вашей проблемы

Итак, чтобы отключить макет на странице, вы должны использовать:

@{
   Layout = null;
}

И, как предлагается, здесь, это может решить вашу проблему:

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

Вместо использования обычного представления создайте частичный вид. Затем их можно использовать сами по себе, что очень похоже на CancelLayout (), или вы можете включить их в представление, которое ссылается на главную страницу, и в этом случае это будет полный макет. Они также полезны, если вы хотите отправить обратно частичный фрагмент HTML в ответ на запрос AJAX.

person Fenton    schedule 22.04.2010

Не повезло с попыткой установить параметр masterPage на "" или null и вернуть View (как я этого не делал)?

Затем попробуйте это и используйте вместо этого PartialView:

   public ActionResult Article(string id)
    {
        return PartialView("~/Areas/Store/Views/CustomerService/" + id);
    }

Мне нужно было сделать это, чтобы асинхронно загрузить содержимое представления из JS.

person Simon Weaver    schedule 03.09.2016

Кажется, это было невозможно в той версии ASP.NET MVC, о которой я спрашивал.

person Aaron Jensen    schedule 11.08.2011

Вы можете создать собственный ActionResult, который делает практически все, что угодно. ActionResult управляет тем, что отправляется обратно клиенту в качестве ответа. Было бы тривиально создать класс, расширяющий ActionResult, который ничего не делает.

person Community    schedule 21.10.2008
comment
Ему не нужен пустой результат, ему нужен результат без макета. - person Matt; 21.10.2008

Один из альтернатив - указать макет, но сделать его пустым _EmptyLayout.cshtml, который ничего не содержит, или просто комментарий, в котором говорится, что он ничего не содержит, чтобы позже кто-то увидел его так, как задумано.

person Mark Schultheiss    schedule 13.11.2020