ASP.. NET MVC 5 ModelState.对json输入代码有效
本文关键字:json 输入 代码 有效 ModelState NET MVC ASP | 更新日期: 2023-09-27 18:16:49
我有一个ASP。. NET MVC 5应用程序,在我的模型中使用Test
类,在我的控制器中使用ModelTest
函数。
我希望能够使用ModelState.IsValid
时,我使用AJAX调用的动作,所以传递一个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字符串,反序列化它并手动填充模型对象吗?没有更快(和自动化)的方法将输入解析为指定的类吗?
This:
http://myServer/myController/ModelTest?input={"num":5, "name ":"myName"}
是一个very无效的URL。查询字符串非常适合简单的键/值对,例如:
http://myServer/myController/ModelTest?num=5&name=myName
事实上,对于像Test
类这样的简单对象,模型绑定器应该足够聪明,可以将这些值解释为该对象的实例。(如果没有,我会很惊讶的。)
但是,如果您有一个JSON结构(您可能需要更复杂的对象),那么该结构必须放在POST正文中,而不是在查询字符串中。
如果您使用AJAX或使用表单POST
您的值,它会自动将您的JSON值绑定到您的传入模型在您的操作方法。
$.post("http://myServer/myController/ModelTest", {"num":5, "name ":"myName"}, function(e) {
// Success
});