Когда MasterPageFile находится в ASP.NET MVC WebForms ViewEngine? - PullRequest
1 голос
/ 26 ноября 2009

Когда свойство MasterPageFile представления / страницы проверяется, существует ли оно в механизме представления ASP.NET MVC WebForms?

Я хочу, чтобы следующий код не выводил ошибку:

Сообщение об ошибке Parser: файл '/SomePlaceThatDosentExist/Site.Master' не существует.

Определено как таковое в файле .aspx моего представления:

<%@ Page Language="C#" MasterPageFile="~/SomePlaceThatDosentExist/Site.Master" Inherits="System.Web.Mvc.ViewPage" >

Где мне нужно было бы написать какой-нибудь код для определения действительного свойства MasterPageFile?

В своем пользовательском классе ViewPage я попробовал следующее, которое мои представления наследуют

    public override string MasterPageFile
    {
        get
        {
            return base.MasterPageFile;
        }
        set
        {
            base.MasterPageFile = "~/RealPlace/Site.Master";
        }
    }

и также попробовал следующее (в классе страницы пользовательского представления, который наследуют мои представления)

    protected override void OnPreInit(EventArgs e)
    {
        base.MasterPageFile = "~/RealPlace/Site.Master";
        base.OnPreInit(e);
    }

В обоих случаях отображается указанная выше ошибка.

Из того, что я знаю, OnPreInit - это самая ранняя точка в жизненном цикле ViewPage, поэтому возможно ли пойти еще раньше в жизненном цикле?

Обратите внимание, прежде чем написать и ответить:

  • Я знаю о возврате View ("ViewName", "MasterPageName");
  • Я знаю о динамических главных страницах, но хочу выполнить эту конкретную задачу

Ответы [ 2 ]

2 голосов
/ 01 декабря 2009

Лучшим решением для решения проблемы, вероятно, является создание пользовательского VirtualPathProvider

0 голосов
/ 26 ноября 2009

Если вы хотите изменить способ поиска главной страницы, вы можете реализовать свой собственный viewengine:

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