验证组在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>
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