2011-04-04 27 views
1

我在我的网站中使用了一些典型的ASP.NET验证控件。现在我试图在我的浏览器中禁用JavaScript来测试我的应用程序,当然Validation Controls不再有效。我认为这是最好的尝试让他们使用建议的解决方案下的一个位置,而不是再投资轮工作,并建立了页面或验证层我的对象-Am我想正确的 - ?如何在ASP.NET中禁用JavaScript时处理验证

你这是什么想到这些选项,原因是:

  1. 包括在按下按钮的事件代码检查,如果该页面是有效的,如果没有显式调用Page.Validate();方法

  2. 检查是否启用JavaScript,如果我不应该打电话给Page.Validate();

如果您有更好的方法可以做,请告诉我。

回答

1

验证控件旨在验证服务器端的主要是。客户端验证是可选的(请参阅EnableClientScript属性)。所以,如果它们不被停用JavaScript的工作,那么你很可能缺少在您的网页,一点点样板代码,如本段从the MSDN documentation on Page.IsValid

private void ValidateBtn_Click(Object Sender, EventArgs E) 
{ 
    Page.Validate(); 
    if (Page.IsValid == true) // yes, it is written this way in the MSDN documentation 
     lblOutput.Text = "Page is Valid!"; 
    else 
     lblOutput.Text = "Some required fields are empty."; 
} 

您也可以拨打Page.Validate并在页面的检查Page.IsValidOnLoad事件,以便您可以防止表单需要重新提交时进行下一步的回发。您可能甚至不需要明确地致电Validate()Button.CausesValidation默认为true。

+0

@harpo ..此代码看起来不错,在onload尖太好了。但是这仅仅是一种罕见的情况(有一个JS禁用的浏览器)..所以,无论如何调用validate方法是明智的,即使启用了JS,也失去了即时反馈的客户端功能,增强了用户体验和还保存到服务器的旅程 – lKashef 2011-04-04 04:17:06

+0

通过正确处理服务器端的页面,您不会失去客户端行为。事实上,如果客户端验证正在完成它的工作,那么这个代码永远不会被首先调用(因为不会发生回发)。 – harpo 2011-04-04 04:20:27

+0

通过“正确处理服务器端的页面”,你是什么意思? ..因为从你的代码我认为,即使JS被启用,它验证了所有的控件,一切都很好,ButtonClick将再次尝试验证页面,并检查它是否有效..我很抱歉,也许我错了但你能为我分手吗? – lKashef 2011-04-04 04:26:37

3

Javascript表单验证纯粹是为了用户的方便。这阻止了他们提交一个无效的电话号码或任何形式的表格。

收到所有请求时,实际上应在服务器上验证所有输入。这里是理想的流量,你会看到,没有启用JavaScript的浏览器也没什么大不了的:

browser -> javascript validation (optional) -> server validation (if this fails, go back to initial page with errors)

所以,即使他们没有JS,该网页还提交了数据,那么你就可以返回来自服务器的错误。这通常是一种较差的用户体验(整页重新加载,除非重新填写表单,否则可能会重新输入输入内容),这就是为什么JS经常包含在验证方案中的原因。

+0

亚历克斯是对的,我们应该总是使用服务器端验证。客户端验证可以通过一些技巧绕过,但服务器端验证应始终存在。最好的方法是使用两者。 – Abhi 2011-04-04 03:55:33

+0

我知道这没什么大不了的,在任何PC上发生这种情况的可能性都很低..但我试图保存多次到服务器的行程。 “(如果失败了,返回到错误的初始页面)”这是我需要知道如何做到的一点,也许有些代码 – lKashef 2011-04-04 03:56:05

+0

而且没有必要提及服务器验证的重要性。这就是为什么我想要以确保如果客户端失败,服务器端将返回 – lKashef 2011-04-04 03:57:22

0

你需要做定制服务器端验证... http://msdn.microsoft.com/en-us/library/aa479013.aspx(朝底部信息)

事情是这样的:

<%@ Page Language="C#" %> 
<script runat="server"> 

     void Button1_Click(Object sender, EventArgs e) { 
     if (Page.IsValid) { 
      Label1.Text = "VALID ENTRY!"; 
     } 
     } 

     void ValidateNumber(object source, ServerValidateEventArgs args) 
     { 
     try 
     { 
      int num = int.Parse(args.Value); 
      args.IsValid = ((num%5) == 0); 
     } 
     catch(Exception ex) 
     { 
      args.IsValid = false; 
     } 
     } 

</script> 
<html> 
<head> 
</head> 
<body> 
    <form runat="server"> 
     <p> 
      Number: 
      <asp:TextBox id="TextBox1" 
      runat="server"></asp:TextBox> 

      <asp:CustomValidator id="CustomValidator1" 
      runat="server" ControlToValidate="TextBox1" 
      ErrorMessage="Number must be even" 
      OnServerValidate="ValidateNumber"></asp:CustomValidator> 
     </p> 
     <p> 
      <asp:Button id="Button1" onclick="Button1_Click" 
      runat="server" Text="Button"></asp:Button> 
     </p> 
     <p> 
      <asp:Label id="Label1" runat="server"></asp:Label> 
     </p> 
    </form> 
</body> 
</html> 
+0

。我很抱歉,为什么我会去做那件事?我得到了你的示例的功能,但我的意思是,这不是说我根本不使用客户端验证(JS)吗? – lKashef 2011-04-04 04:20:32

+0

这是一个良好的编码器在服务器端进行验证的最佳实践.....对于安全目的也更好。 – 2011-04-04 04:39:20

+1

我认为这不是单纯依靠客户端验证的最佳实践! – lKashef 2011-04-04 04:52:37

相关问题