您如何避免在服务器和客户端重复验证?

时间:2009-04-22 19:14:10

标签: synchronization client-side server-side client-scripting

如何避免在服务器端和客户端重复验证?是否有一个Web编程平台可以从另一个生成一个,所以我不必保持两个同步?

8 个答案:

答案 0 :(得分:5)

有些框架可以从服务器端验证配置生成客户端验证。

现在我不知道您使用的语言或框架,但也许这篇文章可以提供帮助:http://www.emadibrahim.com/2008/09/08/client-server-side-validation-in-aspnet-mvc/

他正在使用Castle Validator Component和JQuery,并根据服务器端验证属性添加了一些胶水来生成客户端验证。它适用于asp.net mvc。

/导演Asger

答案 1 :(得分:2)

如今,大多数人放弃客户端脚本,只做服务器端。您可以在发送帖子时使用ajax,以便响应比重新加载整个页面的重量轻一点。

答案 2 :(得分:2)

仅需要服务器端验证,因为可以禁用客户端验证。

不需要客户端验证,但它会使您的应用程序在错误处理期间更具响应性,因为您不再需要向服务器提交表单并等待生成的页面返回。

精心设计的应用程序同时使用。

作为旁注,Ajax可用于某些类型的验证,例如在用户注册表单上检查重复的用户名。但是,基本验证(例如检查字段是否仅包含数字)应该在没有它的情况下完成。

答案 3 :(得分:2)

正如其他人提到的,你应该保留重复,因为客户端验证是为了帮助应用程序更快地做出反应来帮助用户,但是,真正的验证是在服务器端,因为你永远不应该相信任何传递的东西直到它被验证。您可能会在服务器端进行更广泛的验证,例如,如果需要检查数据源,例如,服务器端的用户名是唯一的,但用户名是否足够长,或者是电子邮件地址,可以在客户端和服务器端完成。

当有重复时,我倾向于发表评论,特别是如果我使用的是正则表达式,以确保其中的更改在另一个中发生了变化。

良好的单元测试将有助于确保这两者始终保持同步。

答案 4 :(得分:2)

我认为最好的方法是使用提供两者的组件。他们的代码已经过测试,您无需维护它。我过去使用Peter Blum's控件非常成功。除此之外,我认为如果你想提供两个代码库,你将不得不维护两个代码库。有一个名为Script#的工具可以帮助将C#编译为Javascript(它进行翻译,而不是真正的编译),但我不确定它对这种情况有多好。

答案 5 :(得分:0)

在大多数情况下,最好在服务器端进行验证。您有许多不同的选项可以使这更容易,例如Ajax或在PHP中使用粘性表单。我个人倾向于在服务器端进行验证,因为用户可以选择关闭JavaScript并且无法关闭服务器上的验证.....

答案 6 :(得分:0)

您可以做的是让服务器端验证逻辑由您的客户端验证可以通过AJAX调用的Web服务运行,以及当您回发到服务器时。

答案 7 :(得分:0)

Asp.net版本1有验证器控件来执行您要求的操作

http://msdn.microsoft.com/en-us/library/yb52a4x0.aspx