2

私は JSON が初めてで、コントローラーにある JsonResult メソッドにデータを渡そうとしています。このメソッドは、AModel をパラメーターとして受け入れます。この AModel は、いくつかのプロパティと BModel で定義されています。

だから、私は書いた:

function loadDatas() {

    var values = 
    {
        "Title" : "The title",
        "Text" : "Blahblahblah",
        "BModel" : 
        {
            "Summary" : "lorem ipsum",
            "Page" : "15"
        }
    };

    $.post("@Url.Action("Load", "MyController")",values,function(data)
    {
        // do stuff;
    });

そして、私の Load メソッドは次のように定義されています。

[HttpPost]
public JsonResult Load(AModel test)
{
    return Json(test); //dummy example, just serialize back the AModel object
}

Load の開始ブレースにブレークポイントを設定すると、test.Title と test.Text の値は適切ですが、test.BModel.Summary と test.BModel.Page は null です。

この問題の最悪の部分は、alert(values.HousingModel.Summary); を配置した場合です。表示された値は良い値です! values.Title と values.Text があるのに、メソッドに正しく送信されないのはなぜですか??

このリンクを使用して JSON 形式 ( http://www.sitepoint.com/javascript-json-serialization/ ) を理解しましたが、有効なようです...そうではありませんか?

ご協力いただきありがとうございます

アレックス

4

2 に答える 2

1

私の作業コード

アクション方法

[HttpPost]
public JsonResult Json(AModel test)
{
    return Json(new { Success = true });
}

JQuery

$.ajax({
    url         :    "@Url.Action("Load", "MyController")",
    contentType :    "application/json; charset=utf-8",
    dataType    :    "json",
    type        :    "POST",
    data        :    JSON.stringify({test: values})
})}).done(function (result) {
    //Success
}).fail(function (result) {
    //Failed
}).always(function(result) { 
    //Always
});

モデル

public class AModel
{
    public string Title { get; set; }
    public string Text { get; set; }

    public BModel BModel { get; set; }
}

public class BModel
{
    public string Summary { get; set; }
    public string Page { get; set; }
}

間違い

  1. シリアル化が欠落していた
  2. コンテンツ タイプがありませんでした
  3. タイプがありませんでした
于 2013-06-25T21:40:43.817 に答える
0

hour Model を見ないと決定的な答えを出すことはできませんが... BModel.Page が C# の整数である可能性はありますか? その場合、モデルバインダーは、JavaScript文字列値を使用してそのサブオブジェクトに値を設定できません...

于 2013-06-25T21:46:05.790 に答える