ASP.NET动态的修改主题
在有的網站上,允許用戶根據自己的喜好來更改皮膚,這個功能利用ASP.NET的主題機制可以方便的實現,在C#代碼中可以通過Page類的Theme屬性改變頁面的主題,代碼如下:
Page.Theme ="要設置的主題名稱";
要想改變主題,第一個直觀的思想就是在頁面中添加一個DropDownList控件,然后用戶通過選擇相應的主題。 然后增加一個按鈕,在按鈕的Click的事件中根據用戶的選擇來進行修改。但是這個思路并不可行,因為根據對ASP.NET頁面生命周期的分析,當處理Button的click事件時,頁面主題已經應用完畢(因為控件的初始化在PreInit事件發生之前),此時修改
主題不可行。一個可行的思路就是必須在PreInit事件觸發是選擇好頁面的主題值。然后在頁面生命的早期階段(PreInit事件中),無法讀取用戶控件的狀態,顯然這是一組矛盾。所以這里需要一些技巧來解決這個矛盾。
也行很快地就想出第二種方式,就是利用C#的事件處理,通過在按鈕的事件中重新觸發一次PreInit事件,代碼如下:
? protected void Page_Load(object sender, EventArgs e)
??????? {
?this.PreInit += new EventHandler(Page_PreInit);
??????? }
?protected void Page_PreInit(object sender, EventArgs e)
{
this.Theme = DropDownList1.SelectedValue;
}
從實際的運行結果來看,這個方案也不可行,因為在頁面生命周期中,PreInit事件先運行,這時候并不知道控件DropDownList的狀態,所以矛盾沒有解決。
????? 第三種方案就是把用戶所選擇的主題作為一個QueryString參數傳遞,然后在Page類的PreInit事件中讀取此參數并修改主題。
假設已創建了兩個主題:GrassGreen 和SkyBlue,在添加一個客戶端按鈕,并為此按鈕編寫JavaScript腳本。代碼如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ThemePage.aspx.cs" Inherits="ExampleChapter1Dot9.ThemePage" Theme="GrassGreen" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
??? <title>動態更改主題</title>
??? <script type="text/javascript" language="javascript">
??????? function changeTheme() {
??????????? //獲取當前所選的主題
??????????? var theme = document.getElementById('<%=DropDownList1.ClientID %>').value;
??????????? //重新加載當前畫面,并通過QueryString 傳遞所選中的主題
??????????? window.location = "ThemePage.aspx?theme=" + theme;
??????? }
??? </script>
</head>
<body>
??? <form id="form1" runat="server">
??? <div>
??????? 請選擇一個主題:<asp:DropDownList ID="DropDownList1" runat="server">
??????? <asp:ListItem Value="GrassGreen">草綠色</asp:ListItem>
??????? <asp:ListItem Value="SkyBlue">天藍色</asp:ListItem>
??????? </asp:DropDownList>
??????? <br />
????? <asp:Button ID="Button1" runat ="server" Text="更改主題" οnclick="Button1_Click" />
??????? <input type="button" value="更改主題(客戶端Button)" οnclick="changeTheme()" />
??? </div>
??? </form>
</body>
</html>
在.CS文件中
protected void Page_PreInit(object sender, EventArgs e)
??????? {
??????????? this.Theme = Request.QueryString["theme"] ?? "SkyBlue";
??????? }
第三種方案可以解決動態的改變主題。
個人總結,在讀取控件或者改變控件狀態時,必須考慮到頁面生命周期,這個也是學習ASP.NET必須記住的過程。
轉載于:https://www.cnblogs.com/fartherfuture/p/3505341.html
總結
以上是生活随笔為你收集整理的ASP.NET动态的修改主题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: get 和post 方式请求数据
- 下一篇: SQLite主键自增需要设置为integ