[英]ASP.NET MVC 5 ModelState.IsValid with json input code
我有一个ASP.NET MVC 5应用程序,该模型的模型中有一个Test
类,而在控制器中有一个ModelTest
函数。
我希望能够在使用AJAX调用操作时使用ModelState.IsValid
,从而传递JSON对象。 我试过了
public JsonResult Modeltest(Test input) {
if (ModelState.IsValid) {
return Json(new { Response = "Success" }, JsonRequestBehavior.AllowGet);
}
return Json(new { Response = "Error" }, JsonRequestBehavior.AllowGet);
}
Test
类非常简单
public class Test {
public int num { get; set; }
public string name { get; set; }
}
调用将类似于以下内容http://myServer/myController/ModelTest?input={"num":5, "name ":"myName"}
当然,它不起作用,如果我在服务器的第一行放置一个断点,则input
对象为NULL。 唯一可行的解决方案是传递JSON字符串,反序列化并手动填充模型对象吗? 是否没有更快(自动)的方法将输入解析为指定的类?
这个:
http://myServer/myController/ModelTest?input={"num":5, "name ":"myName"}
是一个非常无效的URL。 查询字符串非常适合简单的键/值对,例如:
http://myServer/myController/ModelTest?num=5&name=myName
实际上,对于像Test
类这样的简单对象,模型绑定程序应该足够聪明,可以将这些值解释为该对象的实例。 (如果不这样做,我会感到非常惊讶。)
但是,如果您具有JSON结构(可能需要更复杂的对象),则该结构必须放在POST正文中,而不是查询字符串中。
如果POST
使用AJAX或使用表格的值,它会自动将您的JSON值绑定到你的来电模型在操作方法。
这是一个可用于发布JSON的jQuery代码示例:
$.post("http://myServer/myController/ModelTest", {"num":5, "name ":"myName"}, function(e) {
// Success
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.