【发布时间】:2011-02-07 15:02:54
【问题描述】:
我在使用包含两个单选按钮的简单单选集时遇到问题(我不想使用 RadioButtonList [RBL],因为 RBL 不允许子控件,在我的情况下,如果您选择一个选项,我想在按钮旁边启用一个文本框;是的,你可以用 jQuery 破解它来移动文本框,但这很脏!)。我会检查一个,提交表单(明确地或通过 AutoPostBack),CheckedChanged 事件将永远不会触发。当页面重新加载时,两个按钮都将被取消选中,无论它们在非回发加载时的初始状态还是表单提交之前的状态。
我取出复选框并将其简化为我能想到的最简单的示例。我把 EnableViewState=true 到处乱扔,以防它在我找不到的地方被禁用。
<form id="form1" runat="server" enableviewstate="true">
<div>
<asp:RadioButton ID="foo" Text="foo" runat="server" AutoPostBack="true" OnCheckedChanged="rbChanged" Checked="true" GroupName="foobar" EnableViewState="true" />
<asp:RadioButton ID="bar" Text="bar" runat="server" AutoPostBack="true" GroupName="foobar"
OnCheckedChanged="rbChanged" Checked="false" EnableViewState="true" />
<asp:Label runat="server" ID="resultLbl" />
</div>
</form>
protected void rbChanged(object sender, EventArgs e)
{
if (foo.Checked) resultLbl.Text = "foo is checked";
else if (bar.Checked) resultLbl.Text = "bar is checked";
else resultLbl.Text = "neither is checked";
}
【问题讨论】:
-
你发布的代码应该可以工作,但我不确定我是否理解它对你不起作用。你能试着解释一下吗?
-
FWIW 下的文件,当我向页面添加一对具有类似行为的复选框时;他们工作正常。如果我在 PageLoad 期间使用 VS 的即时窗口检查 foo 或 bar,则在不是回发时检查 foo,否则不会检查。
-
代码不起作用——结果标签永远不会有任何文本,并且 CheckedChanged 事件 (rbChanged) 永远不会触发。
-
您可能想尝试删除您的页面并重新创建它。也许在调试和文件锁定之间,设计器文件变得混乱了。正如我在下面的回答所述,我在一个新的 aspx 页面中测试了您的
exact代码,它工作正常。当您选择任一单选按钮时,页面会回发并更新标签。 -
也许 page_load 中的某些东西正在重置它?
标签: asp.net postback viewstate radio-button