2010-03-31 131 views
2

我有一個aspx頁面,其中包含一個複選框和一個按鈕。該按鈕在默認情況下被禁用,直到用戶選中該複選框。它看起來像當我添加屬性enabled =「false」到按鈕時,它將刪除驗證。當按鈕啓用時,我仍然希望驗證工作。這裏是不同部分的代碼和標記。已禁用的asp.net按鈕禁用按鈕驗證

複選框:

<asp:CheckBox runat="server" ID="termsCheckBox" /> 
<label style="display: inline;"> 
I agree to the Terms & Conditions</label> 

按鈕:

<asp:Button runat="server" ID="registerButton" OnClick="registerButton_Click1" 
Text="Register" Enabled="false" ValidationGroup="accountValidation" /> 

JQuery的:

<script type="text/javascript" language="javascript"> 
$(document).ready(function() { 
    $('#<%=termsCheckBox.ClientID %>').click(function() { 
     var checked = $(this).val(); 

     if (checked != undefined) 
      $('#<%=registerButton.ClientID %>').removeAttr('disabled'); 
     else 
      $('#<%=registerButton.ClientID %>').attr('disabled', 'disabled'); 
    }); 
}); 
</script> 

回答

0

我認爲,如果你啓用了它的工作/禁用的複選框服務器端事件的按鈕,而不是客戶端,因爲相關的客戶端驗證代碼將生成的ValidationGroup按鈕

+0

客戶端工作得很好。我不需要去服務器去啓用一個按鈕。 – Xaisoft 2010-03-31 15:29:32

+0

我的意思是,將asp.net按鈕作爲.Net框架執行的驗證組驗證的一部分,您需要回發到服務器以確保腳本需要將按鈕附加到客戶端上的處理程序。如果你在客戶端有自定義腳本,那麼你需要確保它已經連接到客戶端點擊事件的按鈕被解僱......除非我錯過了一些東西 – Sunny 2010-03-31 15:36:21

+0

好吧,我想我正確地得到了你。您是否在說因爲我在客戶端處理它,而沒有回發,因此按鈕的驗證沒有被處理,因爲它的腳本在啓用時未被添加。 – Xaisoft 2010-03-31 15:46:00

2

這似乎是驗證應附複選框,而不是按鈕。

+0

我試圖在複選框上進行驗證,並且我收到了一條錯誤消息 ,表示ControlToValidate對於複選框無效。 – Xaisoft 2010-03-31 15:28:51

+0

你使用的是什麼類型的驗證程序 - 我在你發佈的代碼中沒有看到它 – Ray 2010-03-31 15:33:37

+0

我正在使用各種,比較,要求,RegularExpression – Xaisoft 2010-03-31 15:34:28

2

天冬氨酸的運行.net是愚蠢的,因爲當一個控件被禁用時,會有各種不會發生的東西。

在這種情況下,將不會爲禁用的按鈕創建用於客戶端驗證的js代碼。

如果試圖從後面的代碼在客戶方的js代碼手動添加,

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    registerButton.OnClientClick = String.Format("javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions('{0}', '', true, '', '', false, false))", registerButton.UniqueID) 
End Sub 

它不會起作用,因爲asp.net不會渲染禁用的控件的所有屬性。

然後有兩種解決方案。在客戶端使用JS禁用該控件,或者添加javascript以在客戶端執行驗證回發。

我做了我的計劃是什麼添加代碼來創建js代碼在客戶端禁用按鈕:

If btnSubmit.Enabled = False Then 
     'Asp.net will not render all the attributes for a control that is disabled. Even if you 
     'try to set the OnClientClick attribute manually in code behind for the control, it will 
     'not work. Asp.net will not render the attribute. This is a workaround for this problem. 
     btnSubmit.Enabled = True 

     strJavaScript &= "btnSubmit.disabled = true;" 

    End If 

    ClientScript.RegisterStartupScript(Page.GetType(), "myStartupScript", strJavaScript, True) 

注意btnSubmit按鈕是在我的客戶端代碼中已定義的JavaScript變量。