Ответ 1
Кажется, это было невозможно в версии ASP.NET MVC, о которой я спрашивал.
В MonoRail вы можете просто CancelLayout() не отображать макет. В ASP.NET MVC единственный способ повлиять на макет, похоже, заключается в том, чтобы передать имя макета в метод View(), например View ( "myview", "mylayout" ); только кажется, что передача нулевой или пустой строки не делает то, что я хочу.
В итоге я создал пустой макет, который просто отображал содержимое, но это кажется глупым.
"Не показывать макет" означает именно это. В режиме просмотра веб-форм они называют макеты "главными страницами". Я хочу отобразить только свое действие и не окружать его главной страницей.
Кажется, это было невозможно в версии ASP.NET MVC, о которой я спрашивал.
В MVC 3 вы можете удалить основной код макета с помощью:
@{
Layout = "";
}
В начале представления добавьте это:
@{
Layout = null;
}
Если вы хотите сохранить таблицу стилей, вам нужно добавить ссылку на нее в этом представлении.
В действии Controller мы можем установить требуемый макет.
return View("Index", "_LAYOUT_NAME", model);
Чтобы отключить это для всех страниц, отредактируйте _ViewStart.cshtml(в корневом каталоге в папке "Представления" ) и убедитесь, что он содержит следующее:
@{
Layout = null;
}
И чтобы включить шаблон для какого-либо определенного вида, в файл .cshtml для этого представления можно добавить следующее: чтобы включить шаблон:
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
Вместо обычного просмотра создайте частичный вид. Они могут использоваться сами по себе, что очень похоже на CancelLayout() - или вы можете включить их в представление, ссылающееся на главную страницу, и в этом случае это будет полный макет. Они также полезны, если вы хотите отправить частичный фрагмент HTML в ответ на запрос AJAX.
Не повезло ли вы установить параметр masterPage
в ""
или null
и вернуть View
(например, я не сделал)?
Затем попробуйте это и используйте PartialView
вместо этого:
public ActionResult Article(string id)
{
return PartialView("~/Areas/Store/Views/CustomerService/" + id);
}
Мне нужно было сделать это, чтобы асинхронно загружать содержимое представления из JS.
Вы можете создать пользовательский ActionResult, который делает почти что угодно. ActionResult контролирует то, что отправлено обратно клиенту в качестве ответа. Было бы тривиально создать класс, который расширяет ActionResult, который ничего не делает.
Если вы хотите отображать содержимое в выходной поток, просто верните EmptyResult из вашего действия вместо ViewResult.
Требуется ли ваше представление иметь главную страницу - они являются необязательной функцией WebForms? Кроме того, вы просматриваете html внутри своего представления?
Не имеет смысла отображать страницу ASPX, написанную с главной страницей, без главной страницы, поскольку элементы управления содержимым не обязательно в правильном порядке.