簡體   English   中英

ASP.NET C#表單驗證

[英]ASP.NET c# Form 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隱藏/顯示的控件(我想),我建議在運行時檢查屬性並根據其觸發驗證,盡管我懷疑這些屬性將不包含任何引用樣式(再次顯示:無)。

我懷疑這是在觸發驗證並檢查可見/不可見驗證時導致您出現問題的原因。

讓我知道這是否有幫助或有其他問題!

您所擁有的應該起作用,因為一旦將Enabled設置為False,驗證器就會被禁用。 然后,即使您明確將文本框設置為可見,驗證器也不會觸發。

因此,您的代碼中還有其他原因引起了這種現象。

您在面板/文本框中使用javascript做某事嗎?

您使用的是觸發驗證程序的相同回發控件還是其他控件?

樣例代碼:

$(function () {
               //btnTogglePanel is the button that show/hide the panel
                $("#btnTogglePanel").click(function () {
                    $("#pnlOpv").toggle();
                    var pnlisvisible = $("#pnlOpv").is(':visible');
                    var revOpv = document.getElementById("revOpv");
                    var rfvOpv = document.getElementById("rfvOpv");
                    ValidatorEnable(revOpv, pnlisvisible);
                    ValidatorEnable(rfvOpv, pnlisvisible);
                });
            });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM