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字符串,反序列化它并手动填充模型对象吗?没有更快(和自动化)的方法将输入解析为指定的类吗?

ASP.. NET MVC 5 ModelState.对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值绑定到您的传入模型在您的操作方法。

下面是一个jQuery代码的例子,你可以用它来发布你的JSON:
$.post("http://myServer/myController/ModelTest", {"num":5, "name ":"myName"}, function(e) {
    // Success
});