验证组在asp.net中的使用

本文关键字:net asp 验证 | 更新日期: 2023-09-27 18:01:51

我不能在asp.net c#中不使用验证组。

我在Google上搜索了解决方案,但没有成功。

在这个简单的窗体asp.net中,TextBox pcs总是被验证,即使值为null或值不是数字。

我的代码asp.net下面,什么是错误的?

HTML:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:TextBox ID="pcs" runat="server" Width="100" CssClass="ddl_Class" ValidationGroup="First"></asp:TextBox>
            <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="pcs"
                ErrorMessage="PCS !" Text="***" Display="None" ValidationGroup="First"></asp:RequiredFieldValidator>
            <asp:RegularExpressionValidator ID="RegularExpressionValidatorPcs" runat="server" ControlToValidate="pcs"
                ErrorMessage="PCS only number" Text="***" Display="None" ValidationExpression="^'d+$" ValidationGroup="First"></asp:RegularExpressionValidator>
            <asp:ImageButton ID="btnSave" runat="server" ImageUrl="/Images/save_button.gif" OnClientClick="return confirm('Confirm ?');" ValidationGroup="First" CausesValidation="true" />
            <asp:ValidationSummary ID="First" runat="Server" ShowMessageBox="true" />
        </div>
    </form>
</body>
</html>

编辑1

问题是OnClientClick事件。

如果在asp:ImageButton中删除此事件,则验证组工作

为什么?

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:TextBox ID="pcs" runat="server"></asp:TextBox>
            <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="pcs"
                ErrorMessage="PCS !" Text="***" Display="Dynamic"></asp:RequiredFieldValidator>
            <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="pcs"
                ErrorMessage="PCS only number" Text="***" Display="None" ValidationExpression="^'d+$" EnableClientScript="true"></asp:RegularExpressionValidator>
            <asp:ImageButton ID="btnSave" runat="server" ImageUrl="/Images/save_button.gif" />
        </div>
        <asp:ValidationSummary ID="First" runat="Server"
            ShowMessageBox="true" />
    </form>
</body>
</html>

验证组在asp.net中的使用

OnClientClick是ASP中引入的一个有用的属性。它允许我们向按钮控件添加一些客户端行为。使用就像提供脚本一样简单,以便在用户单击按钮时调用:

<asp:Button runat="server" ID="Save" 
    OnClientClick="return confirm('Are you sure?');" />

问题是,如果你这样使用它,客户端验证不会触发。查看呈现的HTML很快解释了这种情况:

onclick="return confirm('Are you sure?');WebForm_DoPostBackWithOptions(...)"

正如您所看到的,验证甚至没有机会触发(当调用WebForm_DoPostBackWithOptions时发生)。

解决这个问题很简单(或者不简单)。所有要做的就是在我们的OnClientClick脚本(在互联网上某处找到的一段代码)中做一点改变:

<asp:Button runat="server" ID="Save" 
    OnClientClick="if (!confirm('Are you sure?')) return false;" />

现在我们只在用户没有确认操作的情况下返回false(阻止提交),否则,脚本的其余部分将被调用,从而触发验证。

我说这可能不是一个简单的问题的原因是,验证发生在确认之后,在我看来这不是最好的事情。如果表单上仍然有错误,我们会在用户确认需要保存后通知他,为什么要询问用户是否保存他的数据?

在分析了一些负责处理OnClientScript的代码后,我得出了一个结论,解决这个问题不是一件容易的事情。在显示确认对话框之前,需要在服务器端做一些不光彩的改动,或者在客户端调用验证例程(请记住,在这种情况下,检查是否存在验证例程是必要的)。

From: http://vaultofthoughts.net/OnClientClickBreaksValidation.aspx