验证控件输入是否为正整数,并不能为空。
asp:RegularExpressionValidator只能验证正则,正则是无法判定空值的。我们可以通过增加一个验证控件asp:RequiredFieldValidator来判断是否为空。
以下代码:
<script type="text/javascript" language="javascript" >
function checkBeforeSubmit(frm){ ///判断RegularExpressionValidator触发
if(!Page_Validators || Page_Validators.length == 0){
return;
}
for(var i=0; i<Page_Validators.length; i++){
validator = Page_Validators[i];
if(!validator.isvalid){
alert(validator.errormessage);
}
}
}
</script>
<asp:textbox id="every_page_count" runat="server" Width="20px" Font-Size="Small" Height="15px">50</asp:textbox>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" ControlToValidate="every_page_count" ValidationExpression="^[1-9]{1}[\d]*$" runat="server" Display="None" ErrorMessage="请输入正确的数字。"></asp:RegularExpressionValidator>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="every_page_count" Display="None" ErrorMessage="请输入正确的数字。"></asp:RequiredFieldValidator>
<asp:Button ID="B_BC" runat="server" Text="查询" Width="60px" OnClick="B_BC_Click" OnClientClick="checkBeforeSubmit(this.form)"/>
参考了原文:
ASP.NET 提供了几个有用的Validator:RequiredFieldValidator、RegularExpressionValidator、RangeValidator、CompareValidator,利用这些无疑可以简化我们的代码,不过,在网上经常会有人提到,怎么样让Validator信息不是在网上显示,而是用alert窗口弹出呢?看了网上的一些回答都不如人意。其实要实现这一点,可以非常的简单,请看下面这段代码
-------------------------------------------------------------------
?/P>
<%@ Page Language="C#" CodeBehind="Default.aspx.cs" Inherits="HelloWroldWeb._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
<script language = "javascript" type="text/javascript">
function checkBeforeSubmit(frm){
if(!Page_Validators || Page_Validators.length == 0){
return;
}
for(var i=0; i<Page_Validators.length; i++){
validator = Page_Validators[i];
if(validator.validationGroup == "VG" && !validator.isvalid){
alert(validator.errormessage);
}
}
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="TextBox1" runat="server" ToolTip="input here!" ValidationGroup="VG" CausesValidation="True"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBox1"
ErrorMessage="this field can not be empty!!!" OnPreRender="RequiredFieldValidator1_PreRender"
SetFocus ValidationGroup="VG" Display="None">required</asp:RequiredFieldValidator>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="TextBox1"
Display="None" ErrorMessage="this box can input number only." ValidationExpression="[0-9]+"
ValidationGroup="VG">Number only</asp:RegularExpressionValidator><br />
<asp:Button ID="Button1" runat="server" Text="Click Me" ToolTip="Come on" OnClientClick='checkBeforeSubmit(this.form)' ValidationGroup="VG" /> <br />
<br />
</div>
</form>
</body>
</html>
----------------------------------------------------------------
在这段代码中,所有的东西都是编辑器自动生成,除了前面那一小段javascript代码。这段代码只有一个方法checkBeforeSubmit,它在Button1的OnClientClick属性中被设置,参数this.form没有作用,但是如果你需要一些其它的操作的话,或许有用。在方法checkBeforeSubmit中用到了Page_Validators数组,这个数组在页面加载的时候被构造,遍历这个数据,然后通过validationGroup 和isvalid属性来判断是否属于特定的组以及是否满足验证,如果不满足验证,则弹出错误信息。事实上,你也可以通过直接访问 RequiredFieldValidator1isvalid 来得到某个特定的validator 的验证结果。这个例子稍加改造可以变得更加的灵活和实用。