2011-02-14 59 views
13

我有兩個單選按鈕,當頁面加載時,JavaScript禁用了該按鈕。 RadioButton1默認爲選中狀態。當我點擊按鈕做回發時,RadioButton1不再被檢查。禁用的單選按鈕在回發後丟失值

任何人都知道爲什麼?

這是我的代碼示例。後面的代碼是空的。

<asp:RadioButton ID="RadioButton1" runat="server" GroupName="group" Checked="true"/> 
<asp:RadioButton ID="RadioButton2" runat="server" GroupName="group" /> 
<asp:Button ID="Button1" runat="server" Text="Button"></asp:Button> 
<script type="text/javascript"> 
    window.onload = function() { 
     var RadioButton1 = document.getElementById('<%= RadioButton1.ClientID %>'); 
     var RadioButton2 = document.getElementById('<%= RadioButton2.ClientID %>'); 

     RadioButton1.disabled = true; 
     RadioButton2.disabled = true; 
    }; 
</script> 
+0

可能重複的[在JavaScript中禁用複選框,並將其識別爲在服務器端檢查](http://stackoverflow.com/questions/2462956/disable-a-checkbox-in-javascript-and-recognize-it在服務器端檢查) – 2011-02-14 23:01:06

回答

12

這是HTML的行爲,而不是ASP.NET。將輸入元素標記爲禁用後,不再發送請求。對於文本字段,這可以通過使用Readonly insted Disabled來避免,但我認爲它不適用於複選框或單選按鈕。如果您仍想發佈該值,則必須將其發送到與單選按鈕相關的隱藏字段中,並在服務器上手動處理。

編輯:

Here你可以看到殘疾人和只讀元素和更多形式提交:

禁用控制:

禁用控制不能SUCESSFUL。

只讀控制:

只讀元件可以是成功的。

提交表單:

一個成功的控制是有效的 提交。作爲提交的 表單數據集的一部分,每個成功的控件 都將其控件名稱與其當前值 配對。成功的控件 必須在表單元素 中定義,並且必須具有控件名稱。

但是:

  • 控件被禁用不能成功。
+0

謝謝,這解釋了我的問題。你知道這是爲什麼嗎? – 2011-02-15 13:32:08

4

這是因爲殘疾<input>元素沒有任何值發送到服務器上的回傳,和單選按鈕沒有自己的選中狀態存儲在ViewState,所以它也不能被持久的方式。

由於RadioButton1RadioButton2都被禁用,因此它們的名稱(group)將不會成爲回發的一部分,並且ASP.NET將作爲結果清除它們。

4

嘗試使它們獲得屬性readonly="readonly"代替。禁用的輸入不會發布值。

http://www.w3schools.com/tags/att_input_readonly.asp

+0

問題是鏈接表示readonly屬性只能用於輸入文本和密碼的輸入。 – 2011-02-14 23:14:50

+0

夠公平的,我最近使用readonly,但它是用於文本框。不知道這並不適用於所有輸入。 – CRice 2011-02-15 00:28:52

2

如果禁用元素比他們不會將在回傳發送。在做回發之前,您必須先啓用它們。實施例中的jQuery:

$('#<%= Button1.ClientID %>').click(function() { RadioButton1.disabled = false; 
                RadioButton2.disabled = false; }); 
0

或產生在服務器級禁用複選框/單選按鈕時,也生成一個<input type='hidden' ..對於相同的名稱標籤。這將發佈您的價值。