2011-02-14 45 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' ..对于相同的名称标签。这将发布您的价值。