簡體   English   中英

在頁面postpack中更改會話並在母版頁中使用新值

[英]Changing Session in page postpack and using new value in Master Page

我正在嘗試開始變得怪異的東西,但原則上聽起來很正常。 基本上,我的ASP.NET應用程序中有一個MasterPage,負責在所有頁面中顯示通常的Login / Logout框。 用戶登錄后,將顯示通常的“ Welcome {Name}”。

登錄的用戶詳細信息來自會話。

現在,我有了一個個人資料頁面,用戶可以在其中更改他/她的姓名,這很正常。 編輯后,作為頁面回發的一部分,我使用新的用戶詳細信息更新了會話。

我希望看到的是,如果用戶更改了“歡迎”消息,則會顯示新名稱。

我已經在生命周期中進行了一些研究,實際上,鑒於可以在Page_Load中訪問會話,然后在UpdateButton_Click中對其進行更新,因此在更改會話之前,歡迎消息已經更新。

是否有人對如何強制刷新母版頁有任何想法,或者在設計方面還有其他需要考慮的方面嗎?

我也嘗試將“登錄/注銷”框放入UserControl中,但情況沒有改變。

以下是根據要求提供的更多詳細信息:

PageLoad上的MasterPage(accountMenuTitle只是一個標簽):

var loggedInUser = (Customer) Session["LoggedInUser"];
accountMenuTitle.InnerHtml = loggedInUser.Name;

ProfilePage Button_Click:

var updatedCustomer = update_Customer_Profile(txtFirstName.Text,
txtLastName.Text, txtAlternateEmail.Text, ... etc. etc.);
Session["LoggedInUser"] = updatedCustomer;

因此,當我單擊配置文件頁面中的按鈕時,頁面將重新加載,登錄的用戶將在會話中更新,但已經發生了母版頁面加載,並且標簽顯示了舊名稱。

不要在Page_load中設置控件,而是直接在MasterPage中呈現該值。

母版頁

  <div class="title">
            <h1>
            <% if (Session["UserName"] != null)
       { %>
    <%= Session["UserName"] %>
    <% } %>
            </h1>
        </div>

事件處理者

        protected void Button1_Click(object sender, EventArgs e)
    {
        Session["UserName"] = this.TextBox1.Text;
    }

我最后實現的解決方案依賴於母版頁,該頁公開了一種用於自我更新的方法。

母版頁:

public void UpdateLoginPanel()
{
    if (Session["LoggedInUser"] == null) // logged out
    {
        accountMenuTitle.InnerHtml = "Log in";
    }
    else // logged in
    {
        var loggedInUser = (Customer) Session["LoggedInUser"];
        accountMenuTitle.InnerHtml = loggedInUser.Name;
    }
}

在個人資料頁面的aspx文件中,您可以像這樣公開您的母版頁:

<%@ MasterType VirtualPath="~/CustomerPortal.Master" %>

然后在代碼隱藏按鈕中單擊:

var updatedCustomer = update_Customer_Profile(txtFirstName.Text,
txtLastName.Text, txtAlternateEmail.Text, ... etc. etc.);
Session["LoggedInUser"] = updatedCustomer;
Master.UpdateLoginPanel();

我還不確定這是否比Malcolm的回答更干凈:/

您在這里選擇的嗨方法是正確的。

您已經定義了Master指令,因此您現在擁有所有屬性和其他訪問權限。

我想與您分享一件事,為什么不直接從內容頁面設置母版頁屬性,而不是調用UPDATEPANEL方法(無論如何選擇)

我還能看到您使用過會話...您可以使用VIEWSTATE。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM