1

私は小さなjqueryコードを持っています:

     //foreach the inputs
         json.push({
                 Var1: $(this).attr("id"),
                 Var2: filename,
                 Var3: hash_name
              });
      //end foreach

      $.post(url, {test: json}, function(){}, 'json');

jsonには3つのオブジェクトがあると仮定します(3つの入力を参照してそれらの値を取得した後)。およびMVC3モデルの構造:

public struct Simple
   {
      public string Var1 {
         get;
         set;
      }

      public string Var2{
         get;
         set;
      }

      public string Var3{
         get;
         set;
      }

      public bool Var4 {
         get;
         set;
      }
   }

およびコントローラー:

 [HttpPost]
 public ActionResult Test( List<Simple> test) {
   ...
 }

List<Simple>3つの要素を返します(ここでは正しい)が、すべてのプロパティの値はnullです(falseであるVar4を除く)。

なんで ?

4

2 に答える 2

1

名前は次のようになります(Jsonキー値)

test[0].Var1
test[0].Var2
test[0].Var3

test[1].Var1
.....

Or

[0].Var1
[0].Var2
[0].Var3
......

サーバーが各オブジェクトを構成するプロパティを関連付けることができないという考えなので、番号はグループ化のためだけのものです

モデルバインダーがデフォルト値でインスタンス化したためfalseでVar4あり、フォームから値を読み取らなかった


Javascript

json.push({
                 'test[0].Var1': $(this).attr("id"),
                 'test[0].Var1': filename,
                 'test[0].Var1': hash_name
              });

0オブジェクトごとにインクリメントする必要があります

testJavaScriptの名前は、アクションメソッドのパラメータ名と一致する必要があります

于 2012-04-24T07:48:26.010 に答える
1

やりたいのがModelBindingの場合は、もう少し作業が必要です。ただし、サーバー側でjson配列が必要な場合は、ここで簡単に説明します。System.Jsonをダウンロードします(NuGetを介して実行できます)。クライアント側では、JSONオブジェクトを送信しないでください。これには、まったく異なるアプローチが必要になるためです。代わりに、事前に文字列化してください

    $(document).ready(function () {
        var json = [

            {
                Name: "John Doe",
                Age: 34
            }];
        var str = JSON.stringify(json);
        console.log(str);
        $.ajax({
            url: '/mycontroller/LoadJson',
            data: { values: str },
            type: 'POST',                
            success: function (data) {                   
              //do something
            }
        });
    });

また、サーバー側では、JsonValue.Parseを動的オブジェクトに使用できます(これにより、カスタムオブジェクトの1つに「変換」できます)

    [HttpPost]
    public ActionResult LoadJson(FormCollection collection)
    {
        dynamic values = JsonValue.Parse(collection["values"]);       
        for(int i = 0; i < values.Count; i++)
        {
            var _output = string.Format("My name is {0} and I'm {1} of age", values[i].Name, values[i].Age);
            Console.WriteLine(_output);
        }
        return RedirectToAction("Index");
    }

これは、動的Json解析に関するより長い投稿です http://www.west-wind.com/weblog/posts/2012/Mar/19/Dynamic-JSON-Parsing-in-NET-with-JsonValue

お役に立てれば

于 2012-04-24T16:08:03.697 に答える