1

私の jquery ajax 投稿の 1 つは、投稿データを .NET MVC3 コントローラー メソッドに送信しますが、コントローラー メソッドでは、データが null として表示されます。実質的に同じメソッド本体を使用する他の多くの ajax 投稿があり、それらはすべて正常に機能するため、何が起こっているのかわかりません。

アヤックスの投稿:

$.ajax({
    url: '/Entity/Relate',
    type: 'POST',
    dataType: 'json',
    contentType: 'applicaiton/json; charset=utf-8',
    data: { primaryEntityId: parseInt(entityParentId, 10), relatedEntityId: _createdId },
    success: function (data)
    {
        //do stuff
    },
    error: function ()
    {
        // throw error
    },
    complete: function ()
    {
        //do more stuff
    }
});

コントローラーの方法:

[HttpPost]
public int Relate(int primaryEntityId, int relatedEntityId)
{
    return relationshipRepository.Add(primaryEntityId, relatedEntityId);
}

問題は、Relate メソッドを中断したときに、primaryEntityId と relatedEntityId が null であることです。Firebug の投稿データでは、{primaryEntityId: 13, relatedEntityId: 486} がメソッドに投稿されていることが示されています。

投稿は見栄えが良いのに、コントローラーがデータを取得していない理由について何か提案やアイデアはありますか?

4

1 に答える 1

4

しかし、コントローラーメソッドでは、データは null として表示されます

Int32は値型であり、.NET の値型は にできないため、これは不可能ですnull。おそらく、デフォルト値が割り当てられていることを意味しています。ともかく。

この問題はcontentType、AJAX リクエストで設定したパラメーターに関連しています。JSON ではなく標準のapplication/x-www-form-urlencodedリクエストを送信しているため、削除する必要があります。

$.ajax({
    url: '/Entity/Relate',
    type: 'POST',
    dataType: 'json',
    data: { 
        primaryEntityId: parseInt(entityParentId, 10), 
        relatedEntityId: _createdId 
    },
    success: function (data)
    {
        //do stuff
    },
    error: function ()
    {
        // throw error
    },
    complete: function ()
    {
        //do more stuff
    }
});

JSON リクエストを送信する場合は、ビュー モデルを定義します。

public class RelateViewModel
{
    public int PrimaryEntityId { get; set; }
    public int RelatedEntityId { get; set; }
}

次に、コントローラーにこのビューモデルを引数として取得させます。

[HttpPost]
public int Relate(RelateViewModel model)
{
    return relationshipRepository.Add(model.PrimaryEntityId, model.RelatedEntityId);
}

最後に、実際の JSON リクエストを送信します (JSON.stringifyメソッドを使用):

$.ajax({
    url: '/Entity/Relate',
    type: 'POST',
    dataType: 'json',
    contentType: 'application/json;charset=utf-8',
    data: JSON.stringify({ 
        primaryEntityId: parseInt(entityParentId, 10), 
        relatedEntityId: _createdId 
    }),
    success: function (data)
    {
        //do stuff
    },
    error: function ()
    {
        // throw error
    },
    complete: function ()
    {
        //do more stuff
    }
});
于 2012-12-23T17:32:15.737 に答える