我有两个单选按钮在页面加载时使用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 :(得分:12)
这是HTML的行为,而不是ASP.NET。将input元素标记为已禁用后,将不再在请求中发布。对于文本字段,可以通过使用Readonly insted of Disabled来避免这种情况,但我认为它不适用于复选框或单选按钮。如果您仍想发布该值,则必须在与单选按钮相关的隐藏字段中发送该值,并在服务器上手动处理。
修改:
Here您可以阅读有关禁用和只读元素以及表单提交的信息:
禁用控制:
禁用控制不能成功。
只读控件:
只读元素可能会成功。
表格提交:
成功的控制有效 提交。每个成功的控制 将其控制名称与其配对 当前价值作为提交的一部分 表格数据集。成功的控制 必须在表单元素中定义 并且必须有控制名称。
然而:
- 禁用的控件无法成功。
答案 1 :(得分:4)
这是因为禁用的<input>
元素在回发时不会向服务器发送任何值,而单选按钮也不会将其检查状态存储在ViewState中,因此无法以此方式保留任
由于RadioButton1
和RadioButton2
都被禁用,因此它们的名称(group
)不会成为回发的一部分,因此ASP.NET会清除它们。< / p>
答案 2 :(得分:4)
尝试让它们获取属性readonly="readonly"
。禁用的输入不会发布值。
答案 3 :(得分:2)
如果禁用的元素将不会发送,则会在回发时发送。在进行回发之前,必须先启用它们。 jQuery中的示例:
$('#<%= Button1.ClientID %>').click(function () { RadioButton1.disabled = false;
RadioButton2.disabled = false; });
答案 4 :(得分:0)
或者在服务器级别生成禁用的复选框/单选按钮时,还会生成同名的<input type='hidden'
..标记。这将发布你的价值。