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

时间:2012-03-20 18:14:40

标签: c# asp.net-mvc asp.net-mvc-2

MVC 2

我正在尝试使用jQuery发布到MVC操作,但我得到一个异常,指出id为空。我是否需要在控制器操作上使用某种属性来接受像这样的json数据包?我还缺少别的东西吗?

[HttpPost]
public ActionResult SearchCategory(int id, string SearchTerm, int PageNumber, int SiteIdFilter)
{
    return Json(AssociationsDao.SearchCategory(id, SearchTerm, PageNumber, SiteIdFilter));
}

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
    });
}

从Chrome开发者工具中,这是个例外:

  

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


修改

以下是Chrome发布数据的屏幕截图;我看不出它有什么问题:

enter image description here

1 个答案:

答案 0 :(得分:6)

post功能修改为:

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

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

  

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


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