首先,我想指出,我对在 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 = "";
}
}
}
如果我可以提供任何其他信息,请告诉我。
问候, 安东尼