在回发后禁用单选按钮失去价值

时间:2011-02-14 22:52:51

标签: javascript asp.net

我有两个单选按钮在页面加载时使用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>

5 个答案:

答案 0 :(得分:12)

这是HTML的行为,而不是ASP.NET。将input元素标记为已禁用后,将不再在请求中发布。对于文本字段,可以通过使用Readonly insted of Disabled来避免这种情况,但我认为它不适用于复选框或单选按钮。如果您仍想发布该值,则必须在与单选按钮相关的隐藏字段中发送该值,并在服务器上手动处理。

修改:

Here您可以阅读有关禁用和只读元素以及表单提交的信息:

禁用控制:

  

禁用控制不能成功。

只读控件:

  

只读元素可能会成功。

表格提交:

  

成功的控制有效   提交。每个成功的控制   将其控制名称与其配对   当前价值作为提交的一部分   表格数据集。成功的控制   必须在表单元素中定义   并且必须有控制名称。

     

然而:

     
      
  • 禁用的控件无法成功。
  •   

答案 1 :(得分:4)

这是因为禁用的<input>元素在回发时不会向服务器发送任何值,而单选按钮也不会将其检查状态存储在ViewState中,因此无法以此方式保留任

由于RadioButton1RadioButton2都被禁用,因此它们的名称(group)不会成为回发的一部分,因此ASP.NET会清除它们。< / p>

答案 2 :(得分:4)

尝试让它们获取属性readonly="readonly"。禁用的输入不会发布值。

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

答案 3 :(得分:2)

如果禁用的元素将不会发送,则会在回发时发送。在进行回发之前,必须先启用它们。 jQuery中的示例:

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

答案 4 :(得分:0)

或者在服务器级别生成禁用的复选框/单选按钮时,还会生成同名的<input type='hidden' ..标记。这将发布你的价值。