ASP.NET:如何将相同的验证器控件同时作为客户端和服务器端

问题描述:

对于ASP.NET验证器控件,我希望将用户体验和服务器端验证的客户端验证都用于警惕黑客。 ASP.NET文档使我相信,如果EnableClientScript =“True”,那么如果客户端验证可能用于用户代理,则不会有服务器端验证。要获得服务器端验证,文档中提到使用EnableClientScript =“False”,它完全绕过了客户端验证。ASP.NET:如何将相同的验证器控件同时作为客户端和服务器端

我误解了验证控件是如何工作的?我问,因为很显然,很多开发人员都希望将客户端和服务器端验证结合在一起,并且我发现很难相信这两者在一起使用标准验证控件时是不可能的。

如果我理解正确的ASP.NET文件,然后我能找到的只有两个选择:

  1. 使用两验证控件除了他们的ID和EnableClientScript性质完全一样。显然,维护两个控件几乎是一样的丑陋。

  2. 在后面写一些代码来检查postback,然后在验证器组上调用Validate方法。为什么要在代码中使用自动控制的方式来编写代码?

有没有办法做到这一点,使用一个验证控件没有代码后面?

在此先感谢您的意见。

服务器端验证将始终发生,因此您不必担心它。唯一的解决办法是使用CustomValidator或从BaseValidator创建您自己的验证器类,它们不会执行任何服务器端任何操作。

默认情况下,服务器端验证发生在Page_Load()之后和任何触发事件(例如按钮单击)之前。然而,在你的Page_Load()中,你可以强制一个Page.Validate()。验证发生后,您可以检查Page.IsValid属性。我建议你阅读ASP.NET Validation in Depth。此外,这不是你要求的,但是你理解page lifecycle and ViewState(如果你不使用MVC)是基本的。几乎所有你会遇到的使用它。

+0

感谢您的快速响应。我希望是这样。 – harrije 2010-05-20 17:48:31

+0

@harrije〜如果尼尔森的评论是答案,不要忘记将他的问题标记为答案。这让其他人知道你已经完成了这个问题。欢迎! – jcolebrand 2010-05-20 17:51:34

+0

@drachenstern:感谢您的帮助,但也请记住,您不能立即接受答案。 :) – 2010-05-20 17:53:16

您误解了验证器的工作方式。你总是得到服务器验证,位客户端验证是可选的。唯一的例外是自定义验证器,如果你不想做任何事情你不需要做任何事情。

使用ASP验证在您的标记,然后在回发执行以下操作:

Page.Validate() 
if(Page.isValid) 
{ 
    // Validation passed 
} 

根据这一Microsoft sourceWeb窗体页框架始终在服务器上进行验证,即使确认有已经在客户端上执行。“

关于如何在ASP.Net 2.0中实现验证控件还有更多的信息。据推测,在随后的ASP.Net版本中基本行为没有改变。