2013-02-19 3 views
1

Прежде чем начать, я нашел этот аналогичный вопрос 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 просто свойство, поэтому я не уверен, почему его установка не изменит его значение ,

ответ

1

Я может быть что-то отсутствует, но вы пробовали:

@{ Layout = SetLayout(); }

+0

Да - с помощью метода, который возвращает строку - но тогда я теряю способность работать со значением по умолчанию макета из _ViewStart. cshtml. Меня меньше интересует обходное решение, чем то, почему .NET не позволяет мне писать свойство куки-файла cookie. Было бы неплохо, если бы он по крайней мере выбросил ошибку. – mld

+0

С его точки зрения, нет никакой ошибки, чтобы вы знали об этом. Макет, который вы устанавливаете на нуль, не имеет никакого отношения к текущему макету страницы. Код вида изолирован от кода модели таким образом. Просто позвонив SetLayout(), вы устанавливаете совершенно другое свойство макета, чем тот, который, как вы думаете. – DavidEdwards

+0

Я не уверен, что вы имеете в виду или как модель влияет на это. Я могу создать другое свойство в этом классе прямо рядом с свойством Layout, и оно станет частью представления - то есть. @ {SomeProperty = 1; }. Это проблема наследства, которую я не понимаю? – mld

Смежные вопросы