【问题标题】:How do I put a theme chooser on my master page?如何在我的母版页上放置主题选择器?
【发布时间】:2009-09-29 21:33:29
【问题描述】:

我在母版页上放置了一个带有硬编码主题值的下拉框,并将其命名为 lstThemeChooser。

我希望能够使用它设置页面主题。我读到我应该把这个放在我的每一页:

protected void Page_PreInit(object sender, EventArgs e)
{
    Page.Theme = Request["lstThemeChooser"];
}

但是Request为null,所以没有设置主题。

下拉框设置为 autopostback=True。

任何想法我做错了什么,或者这是否完全不可能?

(asp.net)

【问题讨论】:

    标签: asp.net themes


    【解决方案1】:

    您无法在母版页中执行此操作。您必须在所有页面中执行此操作。我建议对页面对象进行子分类:

    namespace MyNamespace.Mycontrols 
    {
        public class Page : System.Web.UI.Page
        {
            public Page()
            {
                this.PreInit += new EventHandler(Page_PreInit);
            }
    
            void Page_PreInit(object sender, EventArgs e)
            {
                // Apply Theme
                this.Theme = Request["lstThemeChooser"];
            }
        }
    }
    

    编辑:使用该类

    public partial class MyPage: MyNamespace.Mycontrols.Page
    {
        ...
    }
    

    【讨论】:

    • 我希望下拉框出现在页眉的右上角,但页眉由母版页控制。恐怕我不太明白你的答案,你能解释一下你对页面对象进行子分类是什么意思吗?对不起..
    • 在您的母版页中,您可以控制控制逻辑。但是:只有在每个页面上,您才能更改主题。这是因为只有页面而不是母版页具有事件 PreInit 和 InitializeCulture。子类化意味着您创建这样一个我提供的类作为示例。然后,在每个页面上,您必须更改基类。我编辑了我的答案。
    • 我明白了,非常感谢。唯一奇怪的是,在我的母版页中有控件之前,但我的页面中的 page_preinit 事件使用母版页,但请求只是返回 null ......我错过了什么吗?
    • 是的 - 可能有问题。如果您的列表位于命名容器中,则 ID 不是“lstThemeChooser”,而可能类似于:“ctrl0.lstThemeChooser”。设置断点并检查请求对象。
    • 我放弃了,我找不到请求叫什么,即使在断点和检查请求对象之后:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-17
    • 2016-03-18
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多