我可以从MVC操作返回JsonResult并仍然利用验证吗?

时间:2009-01-27 04:33:59

标签: asp.net-mvc validation

我还没有真正试过这个,并希望快速回答​​是或否。

我正在学习如何使用helpful stackoverflow question中的JSonResult。

我想知道的是我可以使用这种动作结果,但仍然可以利用validation provided by the MVC model吗?

如果我返回一个Json结果并且它有一个验证错误它会自动返回一个由验证ajax逻辑捕获的不同结果类型吗?

3 个答案:

答案 0 :(得分:3)

我所做的就是编写自己的继承自JsonResult的ExtendedJsonResult类,最初是为了添加将JavaScriptConverters注册到序列化过程的能力,但后来我允许添加一个CheckContextForErrors方法来查看模型状态错误。上下文以及json结果数据的添加和错误(属性名称,尝试值,消息)。

我实现了自己的HandleJsonErrorInfo类(基于HandleErrorInfo)和HandleJsonErrorAttribute,它们将在拦截任何未处理的异常的Actions上声明,并将异常消息作为JSON返回。

客户端我可以检查JSON响应中是否存在ExceptionMessages数组,然后遍历每个错误。

答案 1 :(得分:2)

不,内置的JsonResult将序列化它给Json的对象并将其发送到线路。如果要发送验证错误,则必须将该信息放在自己的对象中并通过Json发送。

答案 2 :(得分:2)

默认验证消息是在ModelBind(也就是获取请求数据并将其应用于对象)时创建的。这可以通过标准表单提交,或者ajax或任何其他方式来完成。

验证消息存储在ViewData.ModelState中。

使用HtmlHelper完成验证消息的呈现,HtmlHelpers只是查看ModelState并呈现任何适用的消息。作为呈现视图的一部分,HtmlHelpers在服务器端完成。返回JSON会跳过渲染。您可以改为返回部分视图,该视图将呈现作为用户控件一部分的任何验证消息。

也就是说,如果您的控制器动作模型绑定并返回JSON,它仍将在ViewData.ModelState中生成正确的验证信息。如果您想使用它,那么信息就在那里,但需要将其移动到您的模型中,并且您的客户端javascript代码需要知道如何处理它。