从部分视图发送到控制器的ajax为空

时间:2013-09-04 07:44:16

标签: jquery asp.net-mvc-4

我有这个莫名其妙且非常愚蠢的问题。

我的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告诉我这个

enter image description here

但是当我调试时,我的控制器显示了这一点。

enter image description here

我的代码出了点问题。那可能是什么?

1 个答案:

答案 0 :(得分: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,以便服务器上的默认模型绑定器能够自动将请求主体有效负载反序列化为相应的视图模型。