在 asp.net 控件上动态禁用验证
Posted
技术标签:
【中文标题】在 asp.net 控件上动态禁用验证【英文标题】:Dyanamically disable validation on asp.net controls 【发布时间】:2012-07-30 20:19:36 【问题描述】:根据用户填写表单时的响应,可能需要也可能不需要控件。所有这些控件都附加了验证。例如,如果用户没有在他们的地址居住至少 2 年,我需要验证以前的地址信息;如果没有,我需要跳过该验证。
我尝试使用 jQuery 禁用验证器控件,尽管当验证文本“变灰”时,它仍然会导致验证。
<script src="../../Scripts/jquery-1.6.1.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function ()
$('#ddlSpouseData').change(
function ()
var selection = $('#<%= ddlAddressData.ClientID%>').get(0).selectedIndex;
if (selection == 1)
alert(selection);
$('#rfvAddressType').attr('disabled', 'disabled');
$('#rfvBAddress').attr('disabled', 'disabled');
);
);
</script>
<table id="MyTable" class="tableModule">
<tr>
<td class="tableDataBorder">
Data is not available and<br /> will be provided later.
</td>
<td class="tableDataBorder">
<asp:DropDownList ID="ddlAddressData" runat="server">
<asp:ListItem>Please Select</asp:ListItem>
<asp:ListItem>Yes</asp:ListItem>
<asp:ListItem>No</asp:ListItem>
</asp:DropDownList>
</td>
</tr>
<tr class="hideRow">
<td class="tableDataBorder">
Identifying Document
</td>
<td class="tableDataBorder">
<asp:DropDownList ID="ddlAddressType" runat="server">
<asp:ListItem>Please Select</asp:ListItem>
<asp:ListItem>Home</asp:ListItem>
<asp:ListItem>Office</asp:ListItem>
<asp:ListItem>Other</asp:ListItem>
</asp:DropDownList>
<br />
<asp:RequiredFieldValidator ID="rfvAddressType" CssClass="regexError" ControlToValidate="ddlAddressType"
runat="server" ErrorMessage="Please select address type" Display="Dynamic"
InitialValue="Please Select"></asp:RequiredFieldValidator>
</td>
</tr>
<tr class="hideRow">
<td class="tableDataBorder">
Address
</td>
<td>
<asp:TextBox ID="txtAddress" MaxLength="50" runat="server" CssClass="StdTxtBox"></asp:TextBox><br />
<asp:RequiredFieldValidator ID="rfvBAddress" CssClass="regexError" ControlToValidate="txtAddress"
runat="server" ErrorMessage="Please enter your address" Display="Dynamic"></asp:RequiredFieldValidator>
</td>
</tr>
</table>
【问题讨论】:
也许上一个问题的答案会有所帮助。 ***.com/questions/2379445/… 【参考方案1】:使用 CustomValidator 代替您的 RequiredFieldValidator。
例如,您可以按如下方式更改您的 'rfvAddressType' requiredfieldvalidator:
<asp:CustomValidator runat="server"
id="valAddressType"
controltovalidate="ddlAddressType"
onservervalidate="cusCustom_ServerValidate"
errormessage="Please select address type" />
然后在服务器上代码:
protected void cusCustom_ServerValidate(object sender, ServerValidateEventArgs e)
if (ddlAddressType.SelectedItem.Value == "1")
e.IsValid = false; // or do any additional validation checks here!
else
e.IsValid = true;
更多细节在这里:
http://asp.net-tutorials.com/validation/custom-validator/ http://www.4guysfromrolla.com/articles/073102-1.aspx【讨论】:
效果很好——谢谢。 Rolla 网站的 4 Guys 也确实提供了帮助。问候!【参考方案2】:尝试在运行时禁用或启用验证器以实现您想要的功能。你可以试试这段代码。我没有测试过。
//Syntax:
ValidatorEnable(ValidatorContronName,Boolean);
//Explanation:ValidatorContronName - This is ClientID of the Validation control.
Boolean - true(Enable) / false(Disable)
//Example:
ValidatorEnable(document.getElementById('<%=rfvAddressType.ClientID%>'), false);
【讨论】:
无法使其正常工作...重新编写语法以包括 # 为 ID 签名:ValidatorEnable($('#'), false);以上是关于在 asp.net 控件上动态禁用验证的主要内容,如果未能解决你的问题,请参考以下文章
使用 jQuery 启用/禁用特定“验证组”中的 asp.net 验证控件?
ASP.NET Web API 身份验证(Web + 移动)
表单身份验证、ASP.NET MVC 和 WCF RESTful 服务