#c# #asp.net #url-routing #master-pages
#c# #asp.net #url-маршрутизация #мастер-страницы
Вопрос:
Я использую Global.asax
файл для переопределения Page_PreInit
события для установки MasterPageFile
, я также использую Page Routing
.
Кажется, что когда я устанавливаю MasterPageFile
, он нарушает PageRouting
и вызывает 404 для каждого URL.
void Application_PreRequestHandlerExecute(object src, EventArgs e)
{
Page p = this.Context.Handler as Page;
if (p != null) {
p.PreInit = new EventHandler(Page_PreInit);
}
}
void Page_PreInit(object sender, EventArgs e)
{
Page p = this.Context.Handler as Page;
if (p != null) {
if (HttpContext.Current.Session["Branding-UseCustomMasterPage"] != null amp;amp; HttpContext.Current.Session["Branding-CustomMasterPageName"] != null) {
if (Boolean.Parse(HttpContext.Current.Session["Branding-UseCustomMasterPage"].ToString())) {
if (Request.UserAgent.Contains("Valve Steam GameOverlay")) {
p.MasterPageFile = "~/APIMasterPages/" HttpContext.Current.Session["Branding-CustomMasterPageName"].ToString() "-SteamOverlay.master";
}
else {
p.MasterPageFile = "~/APIMasterPages/" HttpContext.Current.Session["Branding-CustomMasterPageName"].ToString() ".master";
}
}
}
else {
if (Request.UserAgent.Contains("Valve Steam GameOverlay")) {
p.MasterPageFile = "~/APIMasterPages/SteamOverlay.master";
}
}
}
}
И код, используемый для установки PageRoutes
:
protected void Application_Start(object sender, EventArgs e)
{
RegisterRoutes(RouteTable.Routes);
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.Ignore("");
routes.MapPageRoute("api-initiate", "api-initiate/{apiKey}/", "~/Corporate/APIInitiate.aspx");
routes.MapPageRoute("404", "{*url}", "~/Page-Not-Found.aspx");
}
Ответ №1:
Все ли объекты, которые вы пытаетесь извлечь из сеанса, случайно равны нулю, и вы нажимаете только регистр else{} в вашем Page_PreInit()?
Комментарии:
1. Да, но даже тогда он все равно будет «p.MasterPageFile = «~/APIMasterPages/SteamOverlay.master»;». Который работает нормально. Но при принудительном использовании новой главной страницы с помощью этого метода, похоже, нарушается вся маршрутизация страницы..
Ответ №2:
Выяснил, в чем проблема; на Page_Load
я взаимодействовал с MasterPage
как таковой;
SiteMaster m = Master as SiteMaster;
Однако, когда я изменил MasterPage
это, в свою очередь, вызывало ошибку; и PageRoute
отправлял сообщение об ошибке 404.
Исправление заключалось в использовании фактического класса, который я наследую в классах MasterPage.
Custom.CustomMasterPage m = Master as Custom.CustomMasterPage;
Определение класса MasterPage:
public partial class SiteMaster : Custom.CustomMasterPage
{
// Master page class
}