我正在使用MVC3,我知道MVC3支持将
JSON文字绑定到Action参数.但我不能成功地做到;
我有一个班级名称Tag
public class Tag { public int tagId { get; set; } public string tagName { get; set; } }
控制器上的Action,名为Tag
[HttpPost] public ActionResult Tag(Tag tag) { // Here will be codes... return Json(new { success = 0 }); }
将js对象作为JSON发送到我的操作的Javascript代码
var tag ={tagId:5,tagName:"hello"}; $.ajax({ url: "/image/tag",type: "POST",data: $.toJSON(tag),success: function (r) { if (r.success == 1) { window.location = r.redirect; } }
发布我在Firebug Net选项卡中看到的数据
{"tagId":5,"tagName":"hello"}
解决方法
您需要将请求的内容类型设置为application / json:
$.ajax({ url: '/image/tag',type: 'POST',contentType: 'application/json; charset=utf-8',success: function (r) { if (r.success == 1) { window.location.href = r.redirect; } } });
啊,你不需要让你的Tag模型属性以小写字母开头:
public class Tag { public int TagId { get; set; } public string TagName { get; set; } }
备注1:ASP.NET MVC 3在幕后使用的JavaScriptSerializer类能够正确处理它.
备注2:在你的Tag操作中,你似乎正在返回以下JSON:{“success”:0}而在你成功的AJAX回调中,你似乎正在使用一些不存在的r.redirect属性.
备注3:避免以与视图模型相同的方式命名控制器操作.通常,动作名称应表示动词(如List,Save,Delete,…),而视图模型表示资源(TagModel,…).