1

ユーザーコントロールに、編集可能なファイルデータを示すアイテムを含む順序付けされていないリストがあります。

これらのアイテムは、ページが読み込まれるとき、または制御要素(AJAX async file upload)がそのOnClient_UploadComplete機能を実行するときに、非表示フィールドに設定されたJSON文字列を使用してJavaScriptで作成します。

これまでのところ、すべてがしっかりしています。アイテムはクライアント側で作成され、既存の非表示フィールドを使用して変更された値を取得し、必要なときにデータをBLオブジェクトに転送できます。

私の問題は、サーバー側のOn_UploadComplete機能中に、サーバーコードが、JavaScriptによって作成された動的に作成されたアイテムを見つけられず、新しいアイテムに重要なデータを追加できないことです。

私は何かが欠けている必要があります。コントロールから取得する値は"/r/n".です。

私の最善の推測は、私のc#コードが間違って設定されていることです。ページ上で、私が持っているulを見つけるために:

Control m_ulFileItems = m_fuPhotoUpload.FindControl("m_ulFileItems");

もう少し探しますが、これはこのコントロールを機能させるための重要な側面です。

4

2 に答える 2

1

サーバー側でこれらのコントロールにアクセスする方法がわかりません。ただし、私が提案するのは、おそらく次のように、クライアントからサーバーに値を渡すことです。$ .ajax({url:...、type:...、data:ids and values in a control from json format} );

詳細は次のとおりです。これがHTMLの場合:

<div>
    <div id="placeHolder"></div>
    <input type="button" value="Submit" onclick="submit();" />
</div>

そして、次の方法でいくつかのテキストボックスを追加しました。

    $(document).ready(function () {
        for (var idx = 0; idx < 10; idx++) {
            $('<input class="myInput" type="text" />').appendTo($('#placeHolder'));
        }
    });

次に、これは機能するはずです:

    function submit() {
        var jsonInput = '{';
        var inputList = $(".myInput");

        for (var idx = 0; idx < inputList.length; idx++) {
            jsonInput = jsonInput + 'txt_' + idx + ': ' + $(inputList[idx]).val() + ',';
        }

        jsonInput = jsonInput.substring(0, jsonInput.length - 1);
        jsonInput = jsonInput + '}';
        alert(jsonInput);

        $.ajax({
            url: "WebForm1.aspx/HandleSubmitClick",
            data: jsonInput

        });
    }

それが役に立てば幸い。

サーバーへのAjax呼び出しが気に入らない場合は、非表示のコントロールを使用し、サーバーに移動する前にその文字列を非表示のコントロールに入れることをお勧めします。そうすれば、サーバー側でその隠されたコントロールの値を取得できるようになります。

とにかく、これが基本的な考え方です。クライアント側でデータを収集して準備し、それをサーバー側に送信します。

于 2012-09-24T19:11:46.473 に答える
1

ページに非表示フィールドを追加し、サーバーにポストバックする前に、リスト内のすべてのアイテムをスキャンし、作成されたアイテムから必要なすべての情報を含むJSONオブジェクトを作成し、非表示フィールドの値をこのJSONに設定します。これで、その値を取得してC#でJSONを解析し、そこから処理できるようになります。

于 2012-09-24T20:25:58.957 に答える