在《ASP.NET揭密》中提到使用验证控件时:“如果浏览器支持javascript,那么客户端验证脚本就自动发送到浏览器,如果浏览器不支持javascript,验证程序就自动在服务器端代码中实现”
1、当验证控件的Enabled和EnableClientScript属性都为True时,我想知道在浏览器支持javascript的情况下(IE4.0以上版本),服务器向浏览器发送了客户端验证脚本后,服务器端是否再来一次验证?2、验证控件的EnableClientScript属性是否在验证控件的Enabled=True时才生效?

解决方案 »

  1.   

    在过往问题中搜索到 saucer(思归/MVP) 的解释:
    the validation will occur again after the page is postback, since people can write code to bypass your page's 客户端验证 and submit data directly to the server sidehttp://search.csdn.net/Expert/topic/2121/2121990.xml?temp=.8041193
      

  2.   

    在微软的asp.net快速入门(QuickStarts)中关于验证控件也有解释:
    Note that the Web Forms page framework always performs validation on the server, even if the validation has already been performed on the client. This helps prevent users from being able to bypass validation by impersonating another user or a preapproved transaction. 注意,Web 窗体页框架总是在服务器上执行验证,即使已经在客户端执行了验证。这有助于防止用户能够通过模拟另一用户或预获准的事务避开验证。
      

  3.   

    1  是的
    2  msdn解释:
    使用 Enabled 属性来指定是否启用验证控件。您可以通过将此属性设置为 false,以编程方式禁用验证控件。将 Control.Visible 或 Enabled 属性设置为 false 将禁止执行验证。这将导致 IsValid 属性总是计算为 true。Enabled 属性与 Control.Visible 属性略有不同。如果将验证控件的 Control.Visible 属性设置为 true,但将 Enabled 属性设置为 false,则仍然为客户端验证呈现该验证控件,但它处于禁用状态。这时,您可以通过使用 DHTML 脚本在客户端上重新启用该验证控件。答案是当然的,否则尽管在页面显示该控件也仅仅是呈灰色