2009-10-07 50 views
0

當關聯的文本框被禁用時(無論文本框是否包含文本),必需的字段驗證程序似乎總是會觸發。必需的字段驗證程序在禁用的文本框上錯誤地驗證失敗

當文本框啓用時,驗證器的行爲是正確的。

有人可以告訴我爲什麼嗎?

我試過用ValidatorEnable禁用所需的字段驗證器,但似乎沒有區別。

下面是來自網頁上的相關HTML(減少):感激地接受

<tr id="trBrokerNetID" runat="server"> 
    <td> 
     <cc1:mitextbox id="txtBrokerNetID" runat="server" cssclass="bodytext" width="220px" maxlength="20" onBlur="JavaScript:CheckBrokerBranch(false);"></cc1:mitextbox> 
     <asp:requiredfieldvalidator id="rfvBrokerNetID" runat="server" width="1px" errormessage="BrokerNetID - Please supply a value" controltovalidate="txtBrokerNetID">*</asp:requiredfieldvalidator> 
    </td> 
</tr> 

任何想法。

+1

爲了簡潔起見,我強烈建議你編輯你的問題。試着把問題放在最上面,然後是下面的細節。人們很容易迅速地看到他們是否可以回答你的問題。 – csl 2009-10-07 13:09:19

+0

好點...猜這意味着你不能回答這個問題; o> – user129345 2009-10-07 15:41:06

回答

1

ASP.NET的驗證以神祕的方式工作:d

首先,它是危險的使用ASP.NET控件的ID來訪問它的jQuery。 如果將控件放置在中繼器中或將頁面包裝在母版頁中,則html元素的id將與您指定的id不同。改爲使用class來訪問元素。

如果ASP.NET驗證器希望啓用該字段,那麼您必須嘗試其他方法。 我的建議是這樣的:

1. 添加類的文本框,這使得它看起來禁用:

$("#txtBrokerNetID").addClass("thisClassMakesItLookDisabled"); 

2. 添加上重點檢查文本框和模糊它的事件如果有焦點:

$("#txtBrokerNetID").focus(function() { 
    $(this).blur(); 
}); 

現在該字段的行爲就好像它被禁用並且驗證程序起作用。

+0

控制 正在考慮使用'我只讀但未禁用誠實'的方法,但不確定如何繼續。謝謝你,我會試一試 – user129345 2009-10-07 16:03:12

0

您可以選擇的一個選項是將ValidationGroup設置爲表單使用的驗證組,然後在需要時驗證表單調用Page_ClientValidate('text_validation_group')。這樣客戶端驗證不會妨礙。

1

現在我不知道的是,當在客戶端禁用控件它不包含在回發中。

這就是爲什麼服務器端驗證正在觸發的原因。就它而言,控制是空的。

解決方法是使用readOnly屬性而不是禁用屬性。

現在弄清楚如何設置控件的樣式使其具有相同的看起來就好像它被禁用一樣。