Прежде чем начать, я нашел этот аналогичный вопрос here, но я не думаю, что это та же проблема.ASP.NET MVC 3 - Пользовательский WebViewPage не может установить свойство макета
Я создал пользовательский WebViewPage<T>
и установил его как базовую страницу для своих просмотров в файле web.config. Это работает нормально. Я добавил метод как следующий к классу -
public void SetLayout()
{
if (!string.IsNullOrEmpty(HttpContext.Current.Request.QueryString["abc"]))
{
Layout = null;
}
}
Там немного больше, в самом прецеденте, но это основной метод. Он вызывается из представления и должен переопределять макет, если передан параметр строки запроса.
@{ SetLayout(); }
Проблема, с которой я столкнулся, заключается в том, что макет не получает значение null. Когда я просматриваю код в Visual Studio, я вижу, что Layout установлен в "~/Views/Shared/_Layout.cshtml"
(от _ViewStart.cshtml
). Затем выполняется код выше, и он должен иметь значение null. Проверка свойства Layout - сразу после этой строки - она по-прежнему установлена в полную строку. В окне Immediate я могу переопределить его на нуль - и это работает, но через код не действует.
Я попытался добавить дополнительное переопределение макета к классу, используя base.Layout и т. Д. Базовый класс показывает, что Layout просто свойство, поэтому я не уверен, почему его установка не изменит его значение ,
Да - с помощью метода, который возвращает строку - но тогда я теряю способность работать со значением по умолчанию макета из _ViewStart. cshtml. Меня меньше интересует обходное решение, чем то, почему .NET не позволяет мне писать свойство куки-файла cookie. Было бы неплохо, если бы он по крайней мере выбросил ошибку. – mld
С его точки зрения, нет никакой ошибки, чтобы вы знали об этом. Макет, который вы устанавливаете на нуль, не имеет никакого отношения к текущему макету страницы. Код вида изолирован от кода модели таким образом. Просто позвонив SetLayout(), вы устанавливаете совершенно другое свойство макета, чем тот, который, как вы думаете. – DavidEdwards
Я не уверен, что вы имеете в виду или как модель влияет на это. Я могу создать другое свойство в этом классе прямо рядом с свойством Layout, и оно станет частью представления - то есть. @ {SomeProperty = 1; }. Это проблема наследства, которую я не понимаю? – mld