Во-первых, я хотел бы отметить, что я очень новичок в работе с инфраструктурой MS Ajax в ASP.NET, поэтому может быть что-то невероятно простое и фундаментальное что я делаю неправильно ... Я более чем счастлив принять это!AJAX с ASP.NET 4 - Использование ajax для добавления в ListItem
В любом случае, я пытаюсь добавить элементы в список, отправив на сервер новый серийный номер, проверив его, а затем обновив элемент управления списком со стороны сервера. В первый раз, когда я нажимаю кнопку, я получаю желаемый результат - новый серийный номер отправляется на сервер, добавляется в экземпляр сервера класса списка, а затем отправляется обратно клиенту. До сих пор так хорошо ...
К сожалению, в следующий раз, когда я нажать на кнопку добавления, я получаю исключение:
Unhandled exception at line 881, column 13 in http://ajax.aspnetcdn.com/ajax/4.5/3/MicrosoftAjaxWebForms.debug.js
0x800a139e - Microsoft JScript runtime error: Sys.WebForms.PageRequestManagerServerErrorException: An item with the same key has already been added.
Эта вторая команда не появляется, чтобы делать его на сервер , исключение, похоже, находится на стороне клиента до того, как оно достигнет сервера (я проверил это, поставив на сервер кнопку контрольной точки и трассировки на обработчике события нажатия кнопки).
Я не уверен, к какому ключу это относится, и я недостаточно знаком с каркасом 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 = "";
}
}
}
Позвольте мне знать, если есть какая-либо дополнительная информация, которую я могу предоставить.
С уважением, Энтони
Я только что привел пример назад еще раз только к кнопке и удалил любой код в обработчике кликов (обработчик все еще там, однако, чтобы убедиться, что что-то срабатывает, когда я нажимаю кнопку). Я все еще получаю проблема - это не имеет никакого отношения к списку! – Anthony