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.stringifydata只需使用与您的操作参数名称 ( ) 相同的键传递参数中的值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 回答