Программно определить имя главной страницы из файла aspx - PullRequest
0 голосов
/ 02 ноября 2010

Я пишу пользовательский WebFormViewEngine и хотел бы выяснить имя файла мастер-страницы, указанного в aspx-файле представления, когда вызывается метод WebFormViewEngine.FindView.

Моя конечная цель состоит в том, чтобыопределите имя нужного файла главной страницы, чтобы я мог использовать файл главной страницы с тем же именем в другом каталоге для визуализации представления.

Так что проблема в том, что у меня естьпуть к файлу представления, но до отображения представления я хочу определить имя файла главной страницы.

Я могу открыть файл и выполнить поиск MasterPageFile = "%", но я надеюсь, что есть лучший способ сделать это.

Спасибо.

1 Ответ

1 голос
/ 02 ноября 2010

Поиск на главной странице работает иначе, чем вы думаете. В движке MVC WebForms существует два основных способа указания главной страницы:

  1. В директиве <%@ Page %> страницы просмотра.
    Этот метод на самом деле не специфичен для MVC, он зависит от функциональности, встроенной в деревья управления WebForms. Вам необходимо указать полный путь, и это значение никогда не будет проверено конвейером MVC, поскольку оно устанавливается и оценивается только после того, как представление начинает выполняться (что происходит после WebFormViewEngine.FindView).

  2. В вашем действии метод ViewResult: return View("Index", "MyCustomMaster")
    Вы можете переопределить главную страницу с вашего контроллера. В этом случае вы можете указать только имя Master View или полный путь к файлу master. Это значение передается в WebFormViewEngine.FindView и оно переопределяет все, что может быть указано в самом представлении.

Если вы всегда используете только # 2, то значения всегда будут проходить через WebFormViewEngine.FindView. Однако, если вы также используете # 1, то вам, в основном, придется сделать то же самое, что MVC делает для включения # 2: написать свой собственный класс страницы:

public class MyViewPage : System.Web.Mvc.ViewPage {
    protected override void OnPreInit(EventArgs e) {
        base.OnPreInit(e);

        // you might not need the following, but perhaps it would be useful to
        // differentiate between #1 and #2
        bool masterOverridenInController = !String.IsNullOrEmpty(MasterLocation);

        string currentPathToMaster = MasterPageFile;
        // change currentPathToMaster any way you like
        MasterPageFile = currentPathToMaster;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...