0

首先,我想指出,我对在 ASP.NET 中使用 MS Ajax 框架非常陌生,因此我可能做错了一些非常简单和基本的事情......我非常乐意接受这一点!

无论如何,我试图通过向服务器发送一个新的序列号,验证它然后从服务器端更新列表框控件来将项目添加到列表框。第一次单击按钮时,我得到了想要的结果——新的序列号被发送到服务器,添加到服务器的列表框类实例,然后发送回客户端。到现在为止还挺好...

不幸的是,下次我单击添加按钮时出现异常:

http://ajax.aspnetcdn.com/ajax/4.5/3/MicrosoftAjaxWebForms.debug.js中第 881 行第 13 列的未处理异常

0x800a139e - Microsoft JScript 运行时错误:Sys.WebForms.PageRequestManagerServerErrorException:已添加具有相同键的项目。

这第二个命令似乎没有将其提交给服务器,异常似乎在客户端到达服务器之前(我通过在按钮单击事件处理程序上的服务器上放置断点和跟踪命令来验证这一点)。

我不确定它指的是什么键,而且我对 ajax 框架还不够熟悉,无法尝试通过 javascript 的嵌套来跟踪问题!

我知道问题与我对列表框的使用无关,因为当我只有按钮和文本框时问题仍然存在。

我已经包含了我的 ASP 代码和代码隐藏或一个非常简单的应用程序,我可以在上面重现这个问题。如果有人能对这个例外有所了解,我将不胜感激 - 到目前为止,我所做的任何搜索都只发现人们使用数据绑定并且确实存在重复键......我什至不知道我在哪里用钥匙!我确定这是在 ajax 框架内部注册的东西。

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

<!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>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ScriptManager runat="server" EnableCdn="true" ID="ScriptManager" />
        <asp:UpdatePanel ID="ListBoxPanel" runat="server">
            <ContentTemplate>
                <asp:ListBox ID="lstSerialNumbers" runat="server" /><br />
                <asp:TextBox ID="txtNewSn" runat="server" MaxLength="50" /><br />
                <asp:Button ID="btnAddSn" runat="server" OnClick="btnAddSn_Click" Text="Add"/>
            </ContentTemplate>
        </asp:UpdatePanel>

    </div>
   </form>
</body>
</html>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Test
{
    public partial class AjaxTest : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void btnAddSn_Click(object sender, EventArgs e)
        {
            lstSerialNumbers.Items.Add(new ListItem(txtNewSn.Text));
            txtNewSn.Text = "";
        }
    }
}

如果我可以提供任何其他信息,请告诉我。

问候, 安东尼

4

3 回答 3

0

我检查了您的代码,它运行良好,没有问题您是否尝试重新安装 ms ajax? http://www.microsoft.com/en-us/download/details.aspx?id=883

于 2012-05-06T09:36:22.247 回答
0

我刚刚遇到了类似的问题,WebForms 控件仅在我的开发机器上停止响应。

例如,我会在列表视图中单击[编辑](第一个命令可以)并获取 EditItemTemplate。如果我单击其他任何内容(例如 [Update] 或 [Cancel]),UI 中将不会发生任何事情,但我可以通过调试器看到更新或取消事件实际上正在触发 - 只是 UI 已死。

我启动了 Fiddler 并且可以看到从请求中发回

"49|error|500|An item with the same key has already been added.|

在拉了很多头发和咬牙切齿之后,我发现了一些有类似问题的可怜的家伙——在他的例子中,它原来是 Telerik rad 脚本管理器参数,它是 EnableCdn = true。我没有使用它,但 ACT 使用的是 CDN。当我设置

<ajaxToolkit:ToolkitScriptManager runat="server"  EnableCdn="false">

一切都开始正常工作了。

我非常讨厌 Ajax Control Toolkit。我发布了这个迟到的“答案”(= 不要在开发人员上使用 CDN),这样其他人就不会像我一样遭受痛苦。

于 2012-09-11T13:32:28.750 回答
0

我只是想结束这个问题,通过简单地重建项目,我设法让一切正常。我不确定是什么导致了这个问题,或者究竟是什么解决了这个问题,但它似乎起到了作用……令人烦恼的是,如果它再次发生(或帮助其他人),我无法指出它。

于 2012-11-01T08:39:09.353 回答