主题在用户控制
答
MSDN says:
使用主题属性时,您必须意识到一个限制 的。该 主题属性只能在 或
Page
PreInit
事件之前设置。
用户控件生命周期页面的PreInit
事件发生后立即启动,所以你将不能够直接从您的控制设定的主题。
但还是有一点点的解决方法:假定当前主题存储在会话对象中,你可以改变你的用户控件的任何地方本届值,那么就刷新页面例如通过在Page_PreInit
处理程序使用Response.Redirect(Request.Url.AbsoluteUri)
和更换主题:
这里是页的PreInit
事件处理程序:
protected void Page_PreInit(object sender, EventArgs e)
{
var theme = Session["Theme"] as string;
if (theme != null)
{
Page.Theme = theme;
}
}
和如在用户控件OnSelectedIndexChanged
事件处理程序:
protected void ddlTheme_SelectedIndexChanged(object sender, EventArgs e)
{
Session["Theme"] = ddlTheme.SelectedValue;
Response.Redirect(Request.Url.AbsoluteUri);
}
答
在用户控制系统负载情况下,使用方法:
this.ApplyStyleSheetSkin(Page);
+0
它'没有回答我的问题...我想从用户控件的动态的OnLoad更改主题。 'Page.Theme = “MyCustomTheme”;' – liron 2011-04-26 10:40:22
的'的Response.Redirect(Request.Url.AbsoluteUri);'将给予我们一个无限循环。我们需要检查'如果(会话[“主题”]!= ddlTheme.SelectedValue)' – liron 2011-04-26 12:00:21
是,'Response.Redirect'会,如果你在执行上的每一页处理的代码中使用它给你一个无限循环。在上面的例子中,假设要对仅回发执行。但是,是的,你说得对,价值需要检查。 – Alex 2011-04-26 12:04:50