Установка переменной сеанса из UpdatePanel - PullRequest
1 голос
/ 16 апреля 2010

Я использую ASP.NET 2.0 AJAX Extensions 1.0 с версией v1.0.20229 AJAX Control Toolkit (которая, насколько мне известно, является самой последней для .NET 2.0 / Visual Studio 2005).

Моя веб-страница (aspx) имеет элемент управления DropDownList на панели обновления. В обработчике события SelectedIndexChanged DropDownList я пытаюсь установить переменную сеанса.

При первом запуске события я получаю Sys.WebForms.PageRequestManagerParserErrorException: «Не удалось проанализировать сообщение, полученное с сервера». Если я продолжу, последующие SelectedIndexChanged будут успешно обработаны.

Я наткнулся на решение, согласно которому, если я инициализирую переменную сеанса в моем Page_Load (таким образом, обработчик событий просто устанавливает значение переменной сеанса, которая уже существует, а не создает новую), проблема исчезает. 1007 *

Я счастлив сделать это, но мне любопытно, что именно является основной причиной. Кто-нибудь может объяснить?

(Я подозреваю, что установка переменной сеанса получает ответ от сервера, который затем возвращается «вызывающему», но это не тот ответ, который он знает, как справиться с причиной исключения?)

РЕДАКТИРОВАТЬ: Я воспроизвел проблему в отдельном небольшом проекте:

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="SessionTest._Default" %>

<!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>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">    
        <asp:ScriptManager ID="ScriptManager1" runat="server" />

        <div>

            <asp:UpdatePanel id="upCategorySelector" runat="server">
                <ContentTemplate>

                    Category:
                    <asp:DropDownList ID="ddlCategory" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlCategories_SelectedIndexChanged">
                        <asp:ListItem>Item 1</asp:ListItem>
                        <asp:ListItem>Item 2</asp:ListItem>
                        <asp:ListItem>Item 3</asp:ListItem>
                    </asp:DropDownList>

                </ContentTemplate>
            </asp:UpdatePanel>

        </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);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...