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

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开发者工具中,这是个例外:

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


编辑

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

在这里输入图像描述


post函数修改为:

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

MVC比asmx web服务更聪明。 实际上,只需传递一个普通的JavaScript对象,而不是坚持使用json字符串。 请参阅此答案以获取更多信息。

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


还要注意async参数是多余的,因为true是默认值,但这不会伤害任何东西。

链接地址: http://www.djcxy.com/p/39221.html

上一篇: Null value posting to MVC action with jQuery

下一篇: The parameters dictionary contains a null entry for parameter