如何避免在服务器端和客户端重复验证?是否有一个网络编程平台可以从另一个生成一个,所以我不必让两者保持同步?
8 回答
有些框架可以从服务器端验证配置生成客户端验证。
现在我不知道您使用的是什么语言或框架,但也许这篇文章可以提供帮助:http ://www.emadibrahim.com/2008/09/08/client-server-side-validation-in-aspnet -MVC/
他将 Castle Validator Component 与 JQuery 一起使用,并添加了一些胶水来根据服务器端验证属性生成客户端验证。它适用于 asp.net mvc。
/阿斯格
我认为最好的方法是使用同时提供两者的组件。他们的代码已经过测试,你不需要维护它。我过去曾使用过Peter Blum 的控件并取得了巨大的成功。除此之外,我认为如果您想同时提供两个代码库,您将不得不维护两个代码库。有一个名为Script#的工具可以帮助将 C# 编译为 Javascript(它进行翻译,而不是真正的编译),但我不确定它在这种情况下的效果如何。
大多数人放弃客户端脚本,现在只做服务器端。发送帖子时可以使用ajax,这样响应比重新加载整个页面要轻一些。
正如其他人提到的那样,您应该保留重复,因为客户端验证是为了帮助应用程序更快地做出反应以帮助用户,但是,真正的验证是在服务器端,因为您永远不应该相信任何传入的东西,直到它已被验证。您可能会在服务器端进行更广泛的验证,尤其是如果需要检查数据源,例如,用户名在服务器端是否唯一,但用户名是否足够长,或者电子邮件地址,可以在客户端和服务器端完成。
当有重复时,我倾向于添加注释,特别是如果我使用正则表达式,以确保一个中的更改在另一个中发生了更改。
良好的单元测试将有助于确保这两者始终保持同步。
需要服务器端验证只是因为可以禁用客户端验证。
不需要客户端验证,但它使您的应用程序在错误处理期间更具响应性,因为您不再需要向服务器提交表单并等待结果页面返回。
设计良好的应用程序同时使用两者。
附带说明一下,Ajax 可用于某些类型的验证,例如检查用户注册表单上的重复用户名。但是,基本验证,例如检查字段是否仅包含数字,应该在没有它的情况下完成。
Asp.net Version 1 had validator controls to do what you are asking
大多数情况下最好在服务器端进行验证。您有许多不同的选项来简化此操作,例如 Ajax 或在 PHP 中使用粘性表单。我个人倾向于在服务器端进行验证,因为用户可以选择关闭 JavaScript 并且他们无法关闭服务器上的验证.....
您可以做的是让服务器端验证逻辑由 Web 服务运行,您的客户端验证可以通过 AJAX 调用,也可以在您回发到服务器时调用。