ASP.NET 使用CustomValidator调用js函数动态修改验证TextBox的正则表达式,无刷新
2011-06-28 14:25
901 查看
文本框输入大的内容与一个DropDownList关联。不同的输入格式需要不同的正则表达式验证。简单的办法是可以设置DropDownlist的服务器响应事件并设置DropDownlist的AutoPostBack属性,然后在服务器响应事件中修改验证控件相关属性。这个方法的明显有缺点,每次更改页面会刷新。解决办法只能通过JS。
验证空间中的CustomValidator允许使用我们自己编写的JS(VBS)函数验证TextBox,所以这个解决起来就容易多了。代码如下:
PS:根据MSDN的解释,JS最好放在FORM标签内。
我原来想的办法是通过js动态修改RegularExpressionValidator来解决的,在验证阶段确实达到我的预期。可是不知道问什么使用这个办法后,无法使用进行Insert操作,DetailsView可以捕获到ItemCommand事件却不能捕获到ItemInserting事件,并且我也没有找找到原因。上面那个办法能够比较好的解决,就用什么那个办法了。
js动态修改TextBox的RegularExpressionValidator正则表达式,无刷新(有BUG待解决)
代码如下:
注意:
1)我的文本框的验证控件的客户端ID是DetailsView_RegularExpressionValidator5因为是固定的,我就没用通过ClientID的方式获取,如果想动态获取验证控件的ID,可以自己修改代码。
2)JS代码中需要修改验证控件的innerText属性。否自验证控件本身现实的错误内容不会改变。
验证空间中的CustomValidator允许使用我们自己编写的JS(VBS)函数验证TextBox,所以这个解决起来就容易多了。代码如下:
PS:根据MSDN的解释,JS最好放在FORM标签内。
<asp:TemplateField HeaderText="身份证明名称" SortExpression="SFZMMC">
<EditItemTemplate>
<asp:DropDownList ID="DropDownListSFZMMC" runat="server" SelectedValue='<%# Bind("SFZMMC") %>'>
<asp:ListItem>居民身份证</asp:ListItem>
<asp:ListItem>组织机构代码</asp:ListItem>
</asp:DropDownList>
</EditItemTemplate>
<InsertItemTemplate>
<asp:DropDownList ID="DropDownListSFZMMC" runat="server"
SelectedValue='<%# Bind("SFZMMC") %>'>
<asp:ListItem>居民身份证</asp:ListItem>
<asp:ListItem>组织机构代码</asp:ListItem>
</asp:DropDownList>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="LabelSFZMMC" runat="server" Text='<%# Bind("SFZMMC") %>'></asp:Label>
</ItemTemplate>
<ControlStyle Width="220px" />
</asp:TemplateField>
<asp:TemplateField HeaderText="身份证明号码" SortExpression="SFZMHM">
<EditItemTemplate>
<asp:TextBox ID="TextBoxSFZMHM" runat="server" Text='<%# Bind("SFZMHM") %>'></asp:TextBox>
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TextBoxSFZMHM" runat="server" Text='<%# Bind("SFZMHM") %>'></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator7" runat="server" ControlToValidate="TextBoxSFZMHM"
Display="Dynamic" ErrorMessage="必须填写身份证明号码"></asp:RequiredFieldValidator>
<asp:CustomValidator ID="CustomValidator1" runat="server" ControlToValidate="TextBoxSFZMHM"
Display="Dynamic" ClientValidationFunction="validateSFZMHM" ErrorMessage="请填写正确的身份证明号码" ></asp:CustomValidator>
<script type="text/javascript" >
function validateSFZMHM(source, arguments) {
var ListSFZMMC= document.getElementById('DetailsView_DropDownListSFZMMC')
if (ListSFZMMC.value=="居民身份证") {
var reg = new RegExp("\\d{17}[\\d|X]|\\d{15");
arguments.IsValid= (reg.test(arguments.Value));
}else {
var reg = new RegExp("^[A-Za-z0-9]{8}-[A-Za-z0-9]{1}");
arguments.IsValid= (reg.test(arguments.Value));
}
}
</script>
</InsertItemTemplate>
我原来想的办法是通过js动态修改RegularExpressionValidator来解决的,在验证阶段确实达到我的预期。可是不知道问什么使用这个办法后,无法使用进行Insert操作,DetailsView可以捕获到ItemCommand事件却不能捕获到ItemInserting事件,并且我也没有找找到原因。上面那个办法能够比较好的解决,就用什么那个办法了。
js动态修改TextBox的RegularExpressionValidator正则表达式,无刷新(有BUG待解决)
代码如下:
注意:
1)我的文本框的验证控件的客户端ID是DetailsView_RegularExpressionValidator5因为是固定的,我就没用通过ClientID的方式获取,如果想动态获取验证控件的ID,可以自己修改代码。
2)JS代码中需要修改验证控件的innerText属性。否自验证控件本身现实的错误内容不会改变。
protected void DropDownListSFZMMC_Load(object sender, EventArgs e)
{
DropDownList dropList=(DropDownList)sender;
dropList.Attributes.Add("onchange","JavaScript:selectChange('"+dropList.ClientID+"')");
}
<asp:DropDownList ID="DropDownListSFZMMC" SelectedValue='<%# Bind("SFZMMC") %>' runat="server" OnLoad="DropDownListSFZMMC_Load">
<asp:ListItem>居民身份证</asp:ListItem>
<asp:ListItem>组织机构代码</asp:ListItem>
</asp:DropDownList>
<script type="text/javascript" >
function selectChange(DropDownListSFZMMC) {
var DetailsView_RegularExpressionValidator5 = document.all ? document.all["DetailsView_RegularExpressionValidator5"] : document.getElementById("DetailsView_RegularExpressionValidator5");
var ListSFZMMC= document.getElementById(DropDownListSFZMMC)
if (ListSFZMMC.value=="居民身份证") {
DetailsView_RegularExpressionValidator5.errormessage = "请填写正确的身份证号";
DetailsView_RegularExpressionValidator5.innerText="请填写正确的身份证号";
DetailsView_RegularExpressionValidator5.validationexpression = "\\d{17}[\\d|X]|\\d{15}";
}
else
{
DetailsView_RegularExpressionValidator5.errormessage = "请填写正确的组织机构代码";
DetailsView_RegularExpressionValidator5.innerText="请填写正确的组织机构代码";
DetailsView_RegularExpressionValidator5.validationexpression = "^[A-Za-z0-9]{8}-[A-Za-z0-9]{1}";
}
}
</script>
相关文章推荐
- ASP.NET中服务器控件Button调用javascript代码运用正则表达式验证TextBox中输入的是否为正整数或正小数,符合要求则继续运行服务器端代码功能的实现
- ASP.NET c# textbox 正则表达式 文本框只允许输入数字(验证控件RegularExpressionValidator )
- asp.net 后台调用js函数返回值 赋值给textbox
- 点滴积累【ASP.NET】---定义一个textbox用户控件在ascx页面!在不同的aspx页面调用时动态验证
- ASP.NET开发中主要的字符验证方法-JS验证、正则表达式、验证控件、后台验证
- asp.net服务端使用正则表达式验证数据合法性.
- ASP.NET开发中主要的字符验证方法-JS验证、正则表达式、验证控件、后台验证
- ASP.NET使用母版页后动态加载JS/CSS
- AjaxPro.dll,asp.net 前台js调用后台方法(无刷新)
- AjaxPro.dll,asp.net 前台js调用后台方法(无刷新)
- asp.net 页面用js调用后台函数
- [Asp.net+JS]asp.net中调用javascript自定义函数的方法总结
- asp.net mvc Model验证总结及常用正则表达式
- 【转】ASP.NET验证控件详解(非空验证,比较验证,范围验证,正则表达式,自定义验证)
- asp.net在使用母版页的内容页面中动态加载css和js文件的方法
- js使用正则表达式验证身份证格式
- JS字符串替换函数全部替换方法 JS 正则表达式如何使用变量
- AjaxPro.dll,asp.net 前台js调用后台方法(无刷新)
- 正则表达式提取网址、标题、图片等一例(.Net Asp Javascript/Js)的实现
- AjaxPro.dll,asp.net 前台js调用后台方法(无刷新)