[英]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.