2009-11-25 1 views
1

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

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

Parser Error Message: The file '/SomePlaceThatDosentExist/Site.Master' does not exist.

Defined как таковой в файле .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

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

+0

Спасибо, что сработали. У меня был провайдер виртуальных путей, который заменил любое событие «SomePlace» на «RealPlace» во всех необходимых методах с избытком (GetFile, FileExists, GetDirectory, DirectoryExists, CombineVirtualPaths) – Omar

-1

Если вы хотите, чтобы изменить то, как будет найден Masterpage вы можете реализовать свой собственный viewengine:

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

Не подходит ли этот код для возврата View («ViewName», «MasterPageName») ;? Не будет ли это проигнорировано, если в файле .aspx уже объявлена ​​директива MasterPageFile @ Page? – Omar

+0

Да, вы должны использовать View («ViewName», «MasterPageName»). Я не уверен, если у aspx can not есть своя директива @Page. –

+0

Я не хочу использовать View («ViewName», «MasterPageName»), я хочу, чтобы главная страница загружалась из директивы @Page. – Omar