一千萬個為什麽

搜索

從UpdatePanel設置會話變量


我正在使用ASP.NET 2.0 AJAX Extensions 1.0和AJAX Control Toolkit的v1.0.20229版本(據我所知,這是.NET 2.0/Visual Studio 2005的最新版本)。

我的網頁(aspx)在UpdatePanel上有一個DropDownList控件。在DropDownList的SelectedIndexChanged事件的處理程序中,我嘗試設置會話變量。

第一次觸發事件時,我得到一個Sys.WebForms.PageRequestManagerParserErrorException:“無法解析從服務器收到的消息”。如果我繼續,後續的SelectedIndexChanged將被成功處理。

我偶然發現了一個解決方案,如果我在Page_Load中初始化會話變量(因此事件處理程序只是設置已存在的會話變量的值而不是創建新的會話變量)問題就會消失。

我很高興這樣做,但我很好奇究竟是什麽原因。誰有人解釋一下?

(我懷疑是設置會話變量會收到服務器的響應,然後返回給'調用者',但是它不知道如何處理導致異常的響應?)

編輯:我在一個單獨的小項目中重現了這個問題:

Default.aspx的</強>






<title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> 

        <div>

            
                

                    Category:
                    
                        Item 1
                        Item 2
                        Item 3
                    

                
            

        </div>

    </form>
</body>
</html>

Default.aspx.cs </強>

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

namespace SessionTest
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
           //If I do this, the exception does not occur.
            if (Session["key"] == null)
                Session.Add("key", 0);
        }

        protected void ddlCategories_SelectedIndexChanged(object sender, EventArgs e)
        {
           //If Session["key"] has not been created, setting it from
           //the async call causes the excaption
            Session.Add("key", ((DropDownList)sender).SelectedValue);
        }
    }
}

最佳答案

轉載註明原文: 從UpdatePanel設置會話變量

猜你喜歡