c# - ASP.NET c# 表单验证

标签 c# asp.net validation

我有一个禁用了所有验证器的 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/

相关文章:

c# - 检查上传图片的尺寸

c# - 提供匿名下载网址的方法

c# - 防止 UpdatePanel 以编程方式更新

html - onmouseenter验证错误

c# - 如何在 C# 中使用 EmailAddressAttribute 验证字符串列表?

jquery - 动态创建一个 div 并将其底部与另一个组件的顶部对齐

c# - WCF 中的 WSDL URI 是什么?

c# - 带有 MonoTouch 的灰条广告?

c# - 在 C# Windows 应用程序中将大型数据表数据导出到 .csv 文件

c# - ASP.NET 应用程序显示 Windows 服务进度