Когда файл MasterPageFile находится в ASP.NET MVC WebForms ViewEngine

StackOverflow https://stackoverflow.com/questions/1800537

Вопрос

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

Что я хочу сделать, так это чтобы следующий код не выводил ошибку:

Сообщение об ошибке синтаксического анализатора:Файл '/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, так можно ли перейти еще раньше в жизненном цикле?

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

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

Решение

Вероятно, ваш лучший способ решить проблему - создать пользовательский Виртуальный поставщик путей

Другие советы

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

public CustomViewEngine()
{
    MasterLocationFormats = new string[] {
        "~/RealPlace/Site.Master""
    };
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top