2012-05-06 3 views
0

Во-первых, я хотел бы отметить, что я очень новичок в работе с инфраструктурой 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 = ""; 
     } 
    } 
} 

Позвольте мне знать, если есть какая-либо дополнительная информация, которую я могу предоставить.

С уважением, Энтони

+0

Я только что привел пример назад еще раз только к кнопке и удалил любой код в обработчике кликов (обработчик все еще там, однако, чтобы убедиться, что что-то срабатывает, когда я нажимаю кнопку). Я все еще получаю проблема - это не имеет никакого отношения к списку! – Anthony

ответ

0

Я просто хотел закрыть этот вопрос, мне удалось получить все, просто перестроив проект. Я не уверен, что вызвало проблему или что именно ее исправили, но, похоже, это трюк ... Раздражает то, что я не мог указать, если это когда-нибудь повторится (или помочь другим людям).

0

я проверил свой код и он работал нормально без проблем вы попробуйте переустановить мс Аякса? http://www.microsoft.com/en-us/download/details.aspx?id=883

+0

У меня нет установленной рамки, так как она входит в состав Visual Studio, но для того, чтобы ее исключить, я установил последнюю версию и не имел никакого эффекта. Я обнаружил, что мой код отлично работает при публикации на нашем производственном сервере, но не на моей машине разработки. Что такое этикет в SO - должен ли я задать новый вопрос или изменить его? – Anthony

0

У меня просто была аналогичная проблема, когда элементы управления WebForms просто перестали отвечать только на мою машину.

Например, я бы нажал [Изменить] в списке (первая команда в порядке) и получить EditItemTemplate. Если бы я нажал на что-нибудь еще (например, [Обновить] или [Отменить]), в пользовательском интерфейсе ничего не произойдет, но через отладчик я вижу, что события обновления или отмены фактически запускаются - только пользовательский интерфейс был мертв.

я запустил Fiddler и мог видеть это отправляется обратно из запроса

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

После много вытягивать волос и скрежет зубов я нашел бедняга with a similar issue - в его случае это оказалось бы параметр диспетчера скриптов telerik rad, который был EnableCdn = true. Я не использую это, но ACT использовал CDN.Когда я установил

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

все начало работать так, как должно быть.

Я действительно ненавижу Ajax Control Toolkit, поэтому. Я отправляю этот поздний ответ (= не используйте CDN на dev), чтобы другие могли не пострадать, как я сделал.

Смежные вопросы