$ .ajax发布到MVC控制器返回内部服务器错误:参数字典包含空条目

时间:2010-02-17 15:15:38

标签: asp.net-mvc jquery

参数字典包含非可空类型'System.Int32'的参数'appId'的空条目,用于'HLIT_TicketingMVC.Controllers.TicketController'中的方法'System.Web.Mvc.ContentResult CheckForInstaller(Int32)'。可选参数必须是引用类型,可空类型,或者声明为可选参数。

function SubmitAjax(url, message, successFunc, errorFunc) {
  $.ajax({
    type:'POST',
    url:url,
    data:message,
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    success:successFunc,
    error:errorFunc
  });
};

数据对象构建如下:

var message={"appId":application.val()};

我也尝试过jsonified字符串:

var message="{'appId':"+application.val()+"}";

var message="{'appId':'"+application.val()+"'}";

我在尝试发布之前验证了消息是否带有正确的int值。鼠标在调试器上最近显示:{appId="6"}

控制器上的方法签名是:

public ContentResult CheckForInstaller(int appId)

当我从方法签名中删除参数时,它确实触及了内部的断点,所以它是需要某种属性的签名,或者我认为消息没有正确构建。

2 个答案:

答案 0 :(得分:9)

删除它:

contentType: 'application/json; charset=utf-8',

MVC不会将JSON解析为int。您需要默认值application/x-www-form-urlencoded

答案 1 :(得分:2)

我认为你可能正在向控制器发送json试试这个

function SubmitAjax(url, message, successFunc, errorFunc) {
  $.ajax({
    type:'POST',
    url:url,
    data:"appId=" + application.val(),//not sure where you get the value from in your current code  
    dataType: 'json',
    success:successFunc,
    error:errorFunc
  });
};