MasterLocationFormats в WebFormViewEngine не используется? - PullRequest
1 голос
/ 14 марта 2009

Я пытался заставить ViewEngine использовать дополнительный путь, используя:

base.MasterLocationFormats = new string[] {
    "~/Views/AddedMaster.Master"
};

в конструкторе ViewEngine. Он хорошо работает для aspx и ascx (PartialViewLocationFormats, ViewLocationFormats).

Мне все еще нужно указать MasterPage в web.config или в объявлении страницы. Но если я это сделаю, то используется это объявление, а не то, что в ViewEngine. Если я использую пустой MasterLocationFormats, ошибка не выдается. Разве это не реализовано в RC1?

EDIT:

с помощью:

return View("Index", "AddedMaster");

вместо

return View("Index");

в контроллере сработало.

1 Ответ

1 голос
/ 15 марта 2009

Ваш пример на самом деле не завершен, но я собираюсь предположить, что ваш блок кода существует на уровне класса, а не внутри метода конструктора. Проблема в том, что базовый класс (WebFormViewEngine) инициализирует свойства "формата местоположения" в конструкторе, следовательно, переопределяет ваше объявление;

public CustomViewEngine()
{
    MasterLocationFormats = new string[] {
        "~/Views/AddedMaster.Master"
    };
}

Если вы хотите, чтобы жестко закодированный мастер включился только как своего рода последнее усилие по умолчанию, вы можете сделать что-то вроде этого:

public CustomViewEngine()
{
    MasterLocationFormats = new List<string>(MasterLocationFormats) {
        "~/Views/AddedMaster.Master"
    }.ToArray();
}
...