0

私はこの不可解で非常にばかげた問題を抱えています。

MVC4 アプリケーションに弱く型付けされた部分ビューがあります。その上にボタンがあります

<input type="button" class="btn btn-primary btn-lg" value="Find" id="fej-find" />

このように、コントローラーからjQuery ajax呼び出しを送信します

//searchedJob.Num = $("#fej-JobNumber").val();
//var DTO = { searchedJob: searchedJob };
var DTO = { searchedJobNumber: $("#fej-JobNumber").val() };
$.ajax({
    data: JSON.stringify(DTO),
    type: 'POST',
    url: '@Url.Action("SearchJobs", "Jobs")',
    success: function (msg) {
        return alert(msg);
    }
});

Firebug は私にこれを示します

ここに画像の説明を入力

しかし、デバッグすると、コントローラーにこれが表示されます。

ここに画像の説明を入力

私のコードに何か問題があります。それは何でしょうか?

4

1 に答える 1

2

何もする必要はありませんJSON.stringify。アクション パラメーター名 ( )dataと同じキーを使用してパラメーターに値を渡すだけです。searchedNumber

$.ajax({
    url: '@Url.Action("SearchJobs", "Jobs")',
    type: 'POST',
    data: { searchedNumber: $("#fej-JobNumber").val() },
    success: function (msg) {
        alert(msg);
    }
});

successまた、コールバックから値を返してはならないことに注意してください。

モデル全体など、より大きく複雑なペイロードをサーバーに送信する場合は、JSON を使用できます。たとえば、次のビュー モデルがあるとします。

public class MyViewModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public IEnumerable<string> Tags { get; set; }
}

コントローラーアクションがパラメーターとして受け取るもの:

[HttpPost]
public ActionResult SomeAction(MyViewModel model)
{
    ...
}

これで、クライアントから JSON として送信できます。

var model = {
    id: 5,
    name: $('#some_input_field').val(),
    tags: [ "tag1", "tag2", "tag3" ]
};
$.ajax({
    url: '@Url.Action("SomeController", "SomeAction")',
    data: JSON.stringify(model),
    contentType: 'application/json',
    success: function(result) {
        alert(result);
    }
});

この場合、適切な Content-Type リクエスト ヘッダーを に設定する必要があることに注意してください。これによりapplication/json、サーバー上の既定のモデル バインダーが、リクエスト ボディのペイロードを対応するビュー モデルに自動的に逆シリアル化できるようになります。

于 2013-09-04T07:46:33.947 に答える