asp.net – 在应用程序或全局主题目录中找不到主题“XXX”

我的asp.net站点允许用户从app_themes文件夹生成的列表中选择他们想要的主题.有时会重命名或删除主题.选择已删除主题名称的任何用户(它存储在cookie中)都将获得异常:

Theme 'XXX' cannot be found in the application or global theme directories
Stack Trace: 
[HttpException (0x80004005): Theme 'test' cannot be found in the application or global theme directories.]
   System.Web.Compilation.ThemeDirectoryCompiler.GetThemeBuildResultType(String themeName) +920
   System.Web.Compilation.ThemeDirectoryCompiler.GetThemeBuildResultType(HttpContext context, String themeName) +73
   System.Web.UI.Page.InitializeThemes() +8699455
   System.Web.UI.Page.PerformPreInit() +38
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +282

陷阱和处理此异常的最佳位置在哪里?

最佳答案
在分配主题的Page_PreInit方法中,有几种方法可以处理它.我所做的是检查以确保该目录存在.如果确实如此,那就是我想要的主题.如果没有,则使用默认主题,我知道该目录存在.

void Page_PreInit(object sender, EventArgs e)
{
    if (ViewState["PageTheme"] == null)
    {
        if (!Directory.Exists("~/App_Themes/THEMENAME_TO_LOOK_FOR"))
        {
            Theme = "DEFAULT_THEME"
        } 
        else 
        {
            Theme = "THEMENAME_TO_LOOK_FOR";
        }
        ViewState["PageTheme"] = Theme;
    } 
    else 
    {
        Theme = ViewState["PageTheme"].ToString();
    }
}

我通常存储在视图状态中,因此我不必每次都重新检查,但如果您正在即时更改主题,那么您可能不需要这样做.

转载注明原文:asp.net – 在应用程序或全局主题目录中找不到主题“XXX” - 代码日志