Отключить макет в ASP.NET MVC? - PullRequest
47 голосов
/ 21 октября 2008

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

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

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

Ответы [ 9 ]

79 голосов
/ 19 января 2011

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

   @{
    Layout = "";    
    }
56 голосов
/ 13 апреля 2012

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

@{
    Layout = null;
}

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

11 голосов
/ 07 ноября 2014

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

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

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

10 голосов
/ 26 января 2016

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

@{
  Layout = null;
}

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

@{
  Layout = "~/Views/Shared/_Layout.cshtml";
}
5 голосов
/ 22 апреля 2010

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

3 голосов
/ 04 сентября 2016

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

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

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

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

3 голосов
/ 11 августа 2011

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

1 голос
/ 16 февраля 2018

Я вижу, в правильном ответе написано, что "Кажется, это невозможно в версии ASP.NET MVC"

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

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

@{
   Layout = null;
}

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

public ActionResult Index()
{
  SampleModel model = new SampleModel();
  //Any Logic
  return View("Index", "_WebmasterLayout", model);
}
1 голос
/ 21 октября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...