0

まず、ASP.NET内でMS Ajaxフレームワークを操作するのは非常に新しいので、間違っているという信じられないほど単純で基本的なことがあるかもしれないことを指摘したいと思います...それを受け入れてとても幸せです!

とにかく、新しいシリアル番号をサーバーに送信し、それを検証してから、サーバー側からリストボックスコントロールを更新することで、リストボックスにアイテムを追加しようとしています。ボタンを最初にクリックすると、目的の結果が得られます。新しいシリアル番号がサーバーに送信され、リストボックスクラスのサーバーのインスタンスに追加されてから、クライアントに返送されます。ここまでは順調ですね...

残念ながら、次に追加ボタンをクリックすると、例外が発生します。

http://ajax.aspnetcdn.com/ajax/4.5/3/MicrosoftAjaxWebForms.debug.jsの行881、列13で未処理の例外

0x800a139e-Microsoft JScriptランタイムエラー:Sys.WebForms.PageRequestManagerServerErrorException:同じキーを持つアイテムが既に追加されています。

この2番目のコマンドはサーバーに到達していないようです。例外は、サーバーに到達する前にクライアント側にあるようです(ボタンクリックイベントハンドラーのサーバーにブレークポイントとトレースコマンドを配置することで、これを確認しました)。

それがどのキーを参照しているかわからないし、javascriptのネストを通して問題を追跡しようとするajaxフレームワークに精通していません!

ボタンとテキストボックスしかない場合でも問題が発生するため、問題はリストボックスの使用とは関係ありません。

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

WebForms コントロールが開発マシンでのみ応答を停止するという同様の問題が発生しました。

たとえば、リストビューで [編集] をクリックし (最初のコマンドで問題ありません)、EditItemTemplate を取得します。他のもの ([更新] や [キャンセル] など) をクリックすると、UI では何も起こりませんが、デバッガーを通して更新またはキャンセル イベントが実際に発生していることを確認できました - UI だけが死んでいました。

私は Fiddler を起動し、これがリクエストから送り返されているのを見ることができました

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

髪を引っ張ったり、歯ぎしりしたりした後、同様の問題を抱えた貧しい人を見つけました。彼の場合、EnableCdn = true である telerik rad スクリプト マネージャーのパラメーターであることが判明しました。私はそれを使用していませんが、ACT は CDN を使用していました。私が設定したとき

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

すべてが正常に機能し始めました。

私は Ajax Control Toolkit が大嫌いです。私が行ったように他の人が苦しまないように、この遅い「回答」を投稿しています(= devでCDNを使用しないでください)。

于 2012-09-11T13:32:28.750 に答える
0

この質問を締めくくりたかったのですが、プロジェクトを再構築するだけですべてを機能させることができました。何が問題を引き起こしたのか、何が正確に修正されたのかはわかりませんが、うまくいったようです...再発した場合(または他の人を助けるために)それを特定できなかったのは迷惑です.

于 2012-11-01T08:39:09.353 に答える
0

私はあなたのコードをチェックし、問題なく正常に動作しました。ms ajax を再インストールしようとしましたか? http://www.microsoft.com/en-us/download/details.aspx?id=883

于 2012-05-06T09:36:22.247 に答える