【问题标题】:Client Side MVC Frameworks (Backbone, Knockout, etc.) and Validation客户端 MVC 框架(Backbone、Knockout 等)和验证
【发布时间】:2012-05-26 12:32:27
【问题描述】:

我现在正在试验不同的客户端 MVC 框架(主要是 Backbone 和 Knockout)。我正在尝试提出一种验证方法。我有只返回数据的 MVC 4 Web API。所有视图引擎逻辑都在客户端。显然,我知道服务器端验证是必须的。这一点,我通过模型绑定使用 DataAnnotations 和标准 ASP.NET MVC 验证来实现。

但是,我最终还是在客户端复制了所有验证逻辑。有没有办法返回数据但附加了验证逻辑?

【问题讨论】:

    标签: asp.net-mvc backbone.js knockout.js asp.net-web-api


    【解决方案1】:

    Blast-Dan 部分正确,这意味着除了键值对之外,您不能从客户端向服务器传递额外的数据。

    但是,您可以做的是将您的 DataAnnotations 传播到客户端,这样就不需要重写某些验证代码。对于复杂的规则来说这不是微不足道的,但是 Html.EditorFor 帮助器将帮助您生成带有附加验证属性的输入文本框,这些属性由 jquery 验证无缝拾取并停止表单提交。 我正在考虑 [Required]、[Range()] 和 [RegularExpression()] 数据注释等等。

    如果您只是创建一个普通模型,然后使用向导在 Visual Studio 中添加控制器以创建用于 CRUD 操作的视图,则可以查看一个快速示例。您将看到您在 Model 类中使用的数据注释最终是如何在输出 html 上呈现的。

    如果您在没有 HtmlHelper 的情况下自己创建 HTML(我认为您可能会因为敲除标记而这样做),您可能需要检查 DataAnnotationsModelValidatorProvider 和从 this link 开始的 IClientValidatable 接口。

    如您所见,这仍然是未知领域:/

    【讨论】:

    • 更多关于如何使用不显眼的 javascript 实现这一点,可以在 Brad Wilson 的博客 here for validationhere for events 上找到
    • 感谢您的回复。但是,我正在处理服务器仅返回 JSON 数据的场景。服务器端不存在视图引擎逻辑。我正在考虑使用客户端视图引擎(把手、小胡子等)。
    • 通常对于简单的验证(必填字段、数据类型等),我使用类似 jquery 验证插件的东西;不幸的是,这些必须在浏览器中重新创建,但您会发现这很容易,因为您不必处理所有不显眼的 hooha。对于复杂的验证,我通常在服务器上执行这些操作,并在 json 响应中提供反馈并显示在我的模板中,和/或在同一个插件中使用删除验证。同意,数据注释是服务器端的方式。
    【解决方案2】:

    不,

    向服务器提供数据时,您需要使用 HTTP 协议,您将使用 Post 或 Get 方法。这只能传递键值对。使用 MVC 数据绑定,您可以绑定这些键值对来创建复杂对象。

    但是,无法将元数据或函数传输到 C# 以完成验证。所有验证逻辑都需要在服务器端和客户端脚本语言上编写,以提供正确的验证

    【讨论】:

      猜你喜欢
      • 2011-02-13
      • 2012-09-19
      • 2013-10-11
      • 1970-01-01
      • 2012-07-29
      • 1970-01-01
      • 2010-09-14
      • 2014-07-21
      相关资源
      最近更新 更多