-2

私はコントローラーを持っています

var subCategories = m_listsRepository.GetSubCategories(id);
var items = subCategories.Select(x=>new MyDataNameAndId(){Id = x.Value, Name = x.Text});
return Json(items);

そしてajax:

$.ajax({
        url: urlString,
        type: 'POST',
        data: JSON.stringify({ id: districtId }),
        dataType: 'json',
        contentType: 'application/json',
        cache: 'false',
        success: function (data) {
            alert("success");
            $.each(data, function (key, MyDataNameAndId) {
                alert(key);//== 0
                alert(MyDataNameAndId);// then throws
                $('select#ChangeOnsubCategoryId').append('<option value="0">Select One</option>');

                $.each(MyDataNameAndId, function (index, manager) {
                    $('select#ChangeOnsubCategoryId').append(
                            '<option value="' + manager.Id + '">'
                            + manager.Name +
                            '</option>');
                });
            });
        }
    });

私は何を間違っていますか?

更新: コントローラーは機能しています。アラート(「成功」); - show alert(key); です。- is show 0 alert(MyDataNameAndId); - 表示されません。select#ChangeOnsubCategoryId から「select#ChangeOnsubCategoryId」オプションを生成する必要があります

どうやってこれを行うのですか?これはわかりますか?

渡されたjsonを表示する方法がわかりません

json 文字列:

[{"Id":"53","Name":"футбол"}]
4

2 に答える 2

0

あなたが書き出した JSON 出力から、次のように少し書き直します。

$.ajax({
    url: urlString,
    type: 'POST',
    data: JSON.stringify({ id: districtId }),
    dataType: 'json',
    contentType: 'application/json',
    cache: 'false',
    success: function (data) {
        if (!data) return; // if data is empty, return

        var $select = $('select#ChangeOnsubCategoryId');
          // put the select element in a variable so you don't need to
          // jquery select it again

        $select.append('<option value="0">Select One</option>');
          // I guess you first want to add a "select one" option

        // data should be an array e.g. [{"Id":"53","Name":"футбол"}]
        $.each(data, function (key, manager) {
           // for each "manager" in the "data" array

           // manager should be an object in the data
           // array e.g. {"Id":"53","Name":"футбол"}
           // no need to for each it

           $select.append(
                    '<option value="' + manager.Id + '">'
                    + manager.Name +
                    '</option>');
             // add the manager in the select box
        });
    }
});

私はものを仮定しています。javascript デバッガー (Chrome の開発者ツールや Firefox の Firebug など) を使用して、ajax 呼び出しから取得した値を確認します。関数内にブレークポイントを配置し、データがどうなるかを観察します (この場合、ID と Name を含むオブジェクトの配列である必要があります)。

于 2012-04-13T11:04:11.523 に答える
0
$.each(MyDataNameAndId, function (index, manager) {
                $('select#ChangeOnsubCategoryId').append(
                        '<option value="' + manager.Id + '">'
                        + manager.Name +
                        '</option>');
            });

公正であるべき

$('select#ChangeOnsubCategoryId').append(
         '<option value="' + MyDataNameAndId.Id + '">'
         + MyDataNameAndId.Name +
         '</option>');

サンプル コードは例外なく動作するため、返される JSON に問題があると思われます。投稿した文字列が実際に返されることを確認します。

于 2012-04-13T11:08:08.107 に答える