我有一个禁用了所有验证器的 ASP.NET Web 表单。我只想为用户在单击“提交”按钮后可见的那些控件启用验证器。
这是我的功能:
protected void Submit_Click(object sender, System.EventArgs e) {
if (ddlSite.Visible){
rfvSite.Enabled = true;
base.Validate();
}
else {
rfvSite.Enabled = false;
}
以上代码对于大多数控件都可以正常工作。但是我有几个控件的显示设置为无。只有在做出某些选择时,我才会让它们可见。这些不可见的控件导致了问题。例如。 pnlOpv 面板包含一个文本框,其中有两个验证器 revOpv 和 rfvOpv。
if (pnlOpv.Visible){
revOpv.Enabled = true;
rfvOpv.Enabled = true;
}
else {
revOpv.Enabled = false;
rfvOpv.Enabled = false;
}
上面的代码给我带来了问题,因为即使上面的文本框不可见,因为它包含在不可见的面板中。出于某种奇怪的原因,表单认为验证器已启用并且会返回无效页面。你看到任何错误了吗?
<asp:panel id="pnlOpv" style="margin:0px; padding:0px; display: none;" runat="server">
<label for="txtOpoo" id="opo" style="display:inline; margin-top:5px;"><strong>Other Place of Visit</strong></label>
<asp:TextBox type="text" id="txtOpv" tabindex="2" size="20" maxlength="50" runat="server" style="display:inline; margin-top:5px; background-color:#FCFCFC" EnableViewState="true" />
<asp:RegularExpressionValidator ID="revOpv" runat="server"
ControlToValidate="txtOpv"
ValidationExpression="^[a-zA-Z0-9''-'-,.\s]{1,50}$"
Display="Dynamic"
Font-Names="verdana" Font-Size="10pt" Enabled="false" EnableClientScript="true" EnableViewState="true"> Invalid format.
</asp:RegularExpressionValidator>
<asp:RequiredFieldValidator id="rfvOpv" runat="server"
ControlToValidate="txtOpv"
Display="Dynamic"
Font-Names="Verdana" Font-Size="10pt" Enabled="false" EnableViewState="true" EnableClientScript="true">
Please type other place of visit.
</asp:RequiredFieldValidator>
</asp:panel>
最佳答案
面板具有“显示:无”样式的事实并不意味着它是不可见的。对于 ASP.Net viewstate,面板及其上的所有内容都是可见的。仅当您设置 ASP.Net 属性“visible=false”时,它才会不可见。
现在,对于您使用样式和 javascript(我猜)隐藏/显示的那些控件,我建议在运行时检查属性并基于它触发验证,尽管我怀疑这些属性不会包含任何引用样式的内容(再次显示:无)。
我怀疑这就是导致您在触发验证和检查可见/不可见验证时出现问题的原因。
如果有帮助或有任何其他问题,请告诉我!
关于c# - ASP.NET c# 表单验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21710735/