如何在ASP.NET中禁用JavaScript时处理验证

时间:2011-04-04 03:37:44

标签: c# javascript asp.net validation webforms

我在我的网站上使用了一些典型的ASP.NET验证控件。现在我正在尝试禁用浏览器中的JavaScript来测试我的应用程序,当然Validation Controls不再有效。我认为最好尝试使用其中一个建议的解决方案使其工作,而不是重新投资轮子并为页面或我的对象构建验证层 - 我认为对吗? -

您如何看待这些选项以及原因:

  1. 在单击按钮的事件中包含一个代码,用于检查页面是否有效以及是否显式调用Page.Validate();方法

  2. 检查JavaScript是否已启用,如果未启用,我应致电Page.Validate();

  3. 如果您有更好的方法,请告诉我。

3 个答案:

答案 0 :(得分:3)

Javascript表单验证纯粹是为了方便用户。这会阻止他们提交包含无效电话号码的表单。

当收到任何请求时,实际上应在服务器上验证所有输入。这是理想的流程,您将看到没有启用javascript的浏览器没什么大不了的:

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

因此,即使他们没有JS,页面仍然提交数据,然后您可以从服务器返回错误。这通常是较差的用户体验(整页重新加载,可能重新输入输入,除非您重新填充表单)这就是为什么JS通常包含在验证方案中。

答案 1 :(得分: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.IsValid事件中的OnLoad,以便在表单需要重新启动时阻止回发进入下一步提交。您甚至可能不需要明确调用Validate() - 默认情况下Button.CausesValidation为真。

答案 2 :(得分: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>