使用jQuery将空值发布到MVC操作

Ada*_*kis 2 c# asp.net-mvc asp.net-mvc-2

MVC 2

我正在尝试使用jQuery发布到MVC操作,但我得到一个异常,声明它id是null.我是否需要在控制器操作上使用某种属性来接受像这样的json数据包?我还缺少什么?

[HttpPost]
public ActionResult SearchCategory(int id, string SearchTerm, int PageNumber, int SiteIdFilter)
{
    return Json(AssociationsDao.SearchCategory(id, SearchTerm, PageNumber, SiteIdFilter));
}
Run Code Online (Sandbox Code Playgroud)
post('<%= Url.Action("SearchCategory") %>', 
    JSON.stringify({id: 12, SearchTerm: '', PageNumber: 1, SiteIdFilter: 1}), 
    function(d) { alert(d); });

function post(targetURL, dataInput, success) {
    $.ajax({
        url: targetURL,
        type: "POST",
        contentType: "application/json; charset=utf-8",
        data: dataInput,
        dataType: "json",
        success: success,
        async: true
    });
}
Run Code Online (Sandbox Code Playgroud)

从Chrome开发人员工具中,这是一个例外:

参数字典包含非可空类型'System.Int32'的参数'id'的空条目,用于'Current.Web中的方法'System.Web.Mvc.ActionResult SearchCategory(Int32,System.String,Int32,Int32)' .BackOffice.WebUI.Controllers.SiteProductAssociationsController".可选参数必须是引用类型,可空类型,或者声明为可选参数.参数名称:参数


编辑

这是来自chrome的帖子数据的屏幕截图; 我看不出有什么问题:

在此输入图像描述

Pin*_*nyM 6

post功能修改为:

function post(targetURL, dataInput, success) {
    $.ajax({
        url: targetURL,
        type: "POST",
        data: dataInput,
        success: success,
        async: true        
    });
}
Run Code Online (Sandbox Code Playgroud)

MVC比asmx Web服务更智能.您可以实际上只需传递一个普通的JavaScript对象,而不是坚持使用json字符串.有关更多信息,请参阅此答案.

当你给jQuery的$ .ajax()函数一个javascript对象形式的数据变量时,它实际上将它转换为一系列键/值对,并以这种方式将它发送到服务器.当你发送字符串化的json对象时,它不是那种形式,mvc/mvc2中的标准模型绑定器不会剪切它.


另请注意,async参数是多余的,因为true是默认值,但这不会对任何事情造成伤害.