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发布数据的屏幕截图;我看不出它有什么问题:
答案 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是默认值,但这不会对任何事情造成伤害。