2012-05-06 15 views
0

首先,我想指出的是,我是很新的與ASP.NET內MS Ajax框架工作,所以有可能是一個令人難以置信的簡單和基本我做錯了...我非常樂意接受!AJAX與ASP.NET 4 - 使用Ajax添加到列表項

無論如何,我試圖通過發送一個新的序列號到服務器,驗證它,然後從更新服務器端的ListBox控件項目添加到列表框。我第一次點擊按鈕時,我得到了期望的結果 - 新的序列號被髮送到服務器,添加到服務器的列表框實例中,然後發送回客戶端。 到目前爲止好...

不幸的是,下一次我點擊添加按鈕我得到一個異常:

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

我檢查你的代碼,它工作得很好,沒有任何問題並嘗試重新安裝MS的ajax? http://www.microsoft.com/en-us/download/details.aspx?id=883

+0

我沒有安裝框架,因爲它是Visual Studio的一部分 - 但只是排除它,我沒有安裝最新版本,它沒有效果。 我發現我的代碼在發佈到我們的生產服務器時工作正常,但在我的開發計算機上沒有發現。 SO的禮儀是什麼 - 我應該問一個新問題還是修改這個問題? – Anthony

0

我剛剛遇到類似的問題,WebForms控件只是在我的開發機器上停止響應。

例如,我會在列表視圖,單擊[編輯](第一個命令是確定),並獲得EditItemTemplate裏。如果我點擊其他任何東西(比如[Update]或[Cancel]),UI中什麼都不會發生,但我可以通過調試器看到更新或取消事件實際上正在觸發 - 只是UI已經死了。

我發射了小提琴手,並可以看到這個被送回從請求

"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),以便其他人不會像我那樣受苦。