禁用的单选按钮在回发后丢失值

13

我有两个单选按钮,在页面加载时被禁用。默认情况下,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个回答

12

这是HTML的行为,与ASP.NET无关。一旦将输入元素标记为disabled,它就不会在请求中被提交。对于文本字段,可以使用Readonly代替Disabled来避免这种情况,但我认为对于复选框或单选按钮不起作用。如果您仍然希望提交该值,则必须将其发送到与单选按钮相关的隐藏字段中,并在服务器上手动处理。

编辑:

在这里,您可以阅读有关已禁用和只读元素以及表单提交的信息:

已禁用的控件:

禁用的控件不能成功。

只读控件:

只读元素可能会成功。

表单提交:

成功的控件可以提交。每个成功的控件都将其控件名称与其当前值配对,作为提交的表单数据集的一部分。成功的控件必须在表单元素内定义,并且必须具有控件名称。

然而:

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

谢谢,那解释了我的问题。你知道为什么会这样做吗? - Alexandre Pepin

4

这是因为禁用的 <input> 元素在提交回发时不会向服务器发送任何值,而单选按钮不会将其选中状态存储在 ViewState 中,因此也无法通过该方式进行持久化。

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


4

问题在于链接说只有文本和密码类型的输入可以使用readonly属性。 - Ladislav Mrnka
好的,我最近使用了readonly但是只是用在文本框上。并不知道它并不适用于所有输入。 - CRice

2

如果元素被禁用,则在提交后将不会发送。在执行提交之前,必须先启用它们。以下是使用jQuery的示例:

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

0
或者在服务器级别生成禁用的复选框/单选按钮时,也为相同名称生成一个标签。这将发布您的值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接