参数字典包含非可空类型'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)
当我从方法签名中删除参数时,它确实触及了内部的断点,所以它是需要某种属性的签名,或者我认为消息没有正确构建。
答案 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
});
};