代码之家  ›  专栏  ›  技术社区  ›  Simon_Weaver

我是否可以从MVC操作返回jsonresult并仍然利用验证?

  •  0
  • Simon_Weaver  · 技术社区  · 16 年前

    我还没有真正尝试过这个方法,希望能得到一个快速的“是”或“否”的答案。

    我只是在学习如何使用 helpful stackoverflow question .

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

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

    3 回复  |  直到 16 年前
        1
  •  2
  •   anonymous    16 年前

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

    验证消息存储在viewdata.modelstate中。

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

    也就是说,如果您的控制器操作模型绑定并返回JSON,它仍然会在viewdata.modelstate中生成适当的验证信息。如果您想使用它,信息就在那里,但是它需要移动到您的模型中,并且您的客户端JavaScript代码需要知道如何处理它。

        2
  •  3
  •   Luke Smith    16 年前

    我所做的是编写自己的extendedJSonResult类,该类继承自JSonResult,最初是为了向序列化过程中添加注册JavaScriptConverter的功能,但这之后允许我添加一个checkContextForErrors方法,该方法查看上下文的ModelState错误,并向JSon结果数据(属性名称,尝试的值,消息)。

    我实现了自己的handlejsonerrorinfo类(基于handleerrorinfo)和handlejsonerrorrattribute,这些类在截获任何未处理异常并将异常消息作为json返回的操作上声明。

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

        3
  •  2
  •   Andrew Stanton-Nurse    16 年前

    不,内置的JSonResult将只序列化它被赋予JSON的对象,并将其发送到线路上。如果您想发送验证错误,您必须将这些信息放在自己的对象中,并通过JSON发送这些信息。