4

Im asp.net mvc3 c#コードは、次のようなjsonリストを返します。

return Json(new { name = UserNames, imageUrl = ImageUrls });

UserNamesImageUrlsは両方List<string>のタイプです

そしてこれは私のJavaScriptです

function StartSearch(text) {
    $.ajax({
        url: '/Shared/Search',
        type: 'POST',
        data: { SearchText: text },
        dataType: 'json',
        success: function (result) {
            $.each(result, function (i, item) {
                alert(result[i].name);
            });
        }
    });
}

どうすれば名前を取得できますImageUrlsか?

ありがとう

4

2 に答える 2

5

このような結果のプロパティとしてのアクセス名result.name[i]

基本的に、結果には、匿名型で定義したのと同じように、両方とも配列であるnameとimageUrlが含まれるため、名前配列内の各名前のアラートを表示するには、コードを次のように変更する必要があります

function StartSearch(text) {
    $.ajax({
        url: '/Shared/Search',
        type: 'POST',
        data: { SearchText: text },
        dataType: 'json',
        success: function (result) {
            $.each(result.name, function (i, item) {
                alert(item);
           });
        }
    });
}

name配列内のアイテムを$each反復処理すると、そのアイテムがコールバックの2番目のパラメーターであるitemに渡されます。

それで

$.each(result.name, function (i, item) {
    alert(item);
});

それぞれの名前がポップアップ表示されます。

ノート:

匿名タイプのプロパティを変更して、それらがコレクションであることを反映することができます。

return Json(new { UserNames = UserNames, ImageUrls = ImageUrls });

このように、成功関数でそれらを反復処理するときに、より意味があります。

AlfalfaStrangeが指摘したように、両方のアレイにアクセスする方法については説明しませんでした。ユーザー名と画像のURLの関係は何だと思いましたか?

これはユーザーの画像のリストですか?たぶんあなたが考慮すべきことは、このための特定のモデルを作成することです。たとえば、UserDisplayModel:

public class UserDisplayModel
{
    public string UserName {get;set;}
    public string ImageUrl {get;set;}
}

コントローラで、UserDisplayModelsのリストを返します。この場合、そもそもなぜそれらが2つの別々のリストであるのかを再考する必要があります。たぶん、ImageUrlはUserテーブルのフィールドである必要があります。

だから今、あなたが単一のリストを返すとき、例えば

List<UserDisplayModel> users = //get users from db
return Json(new { Users = Users});

あなたはjsコードで一度にそれらを繰り返すことができます:

       $.each(result.Users, function (i, item) {
            alert(item.Name);
            alert(item.ImageUrl);
        });
于 2012-06-03T10:37:28.527 に答える
4

Nameこれは、各リストの各レコードからの値を警告します。

$.each(result, function (i, item) {
    for (var x = 0; x < result.FirstList.length; x++) {
        alert(result.FirstList[x].Name);
        alert(result.SecondList[x].Name);
    }
});

これは、正しく形成された場合のJson応答を前提としています。このような:

return Json(new { FirstList = results, SecondList = otherResults }, JsonRequestBehavior.AllowGet);

ただし、補足として、対処する必要のあるコードに関する他の問題があります。

  1. あなたは実際には実行していませんPOST、あなたは入力に基づいて検索しています。Ajax通話でに変更POSTしますGET
  2. getを許可するようにアクションの戻り行を変更し、を返すことを確認しますJsonResult
  3. C#メソッドパラメーターの命名規則では、Pascalケースが必要です。最初の文字には小文字を使用します

    public JsonResult Search(string searchText) {
        ....
        return Json(new { name = UserNames, imageUrl = ImageUrls }, JsonRequestBehavior.AllowGet);
    }
    
于 2012-06-03T15:59:54.293 に答える