繁体   English   中英

带有JSON输入代码的ASP.NET MVC 5 ModelState.IsValid

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM