我的HTML。
<input id="rdb1" type="radio" name="rdbData" checked="checked" />
<input id="rdb2" type="radio" name="rdbData" />
<asp:Button ID="btnTest" runat="server" Text="Test" OnClick="btnTest_Click" />
按钮仅为asp:button
,但radio buttons
不是。第一次加载页面时,rdb1被选中。但是当我点击btnTest
按钮并选中rdb2
时,页面刷新并选择第一个redio按钮。为了防止这种情况,我尝试jquery
这样。
在Document.ready
内:
var btnTest = "<%=btnTest.ClientID %>";
$('#' + btnTest).bind("click", function() {
if ($('#rdb1').attr("checked")) {
$('#rdb2').attr("checked", false);
$('#rdb1').attr("checked", true);
}
else {
$('#rdb1').attr("checked", false);
$('#rdb2').attr("checked", true);
}
});
但它不起作用。我们怎样处理这种情况。我在哪里出错。任何想法或任何其他选择。谢谢。
答案 0 :(得分:1)
如果这是请求,我建议你有一个隐藏字段(服务器端),它将保持选择哪个输入单选按钮的状态(当用户点击单选按钮时,使用jquery更新隐藏字段)。然后在回发时,隐藏字段设置在runat =“server”,它将保持其值(viewstate),您只需使用jquery将右侧单选按钮设置为选中状态。这有意义吗?
答案 1 :(得分:0)
什里
事实是客户端点击(由jQuery添加)在调用服务器之前执行。如果要保留selectin,请尝试使用服务器端控件:
<input id="rdb1" type="radio" name="rdbData" checked="true" runat="server" />
<input id="rdb2" type="radio" name="rdbData" runat="server" />
<asp:Button ID="btnTest" runat="server" Text="Test" OnClick="btnTest_Click" />
如果适合您,请尝试此操作。
希望它有所帮助。
答案 2 :(得分:0)
单击“测试”按钮时,页面会回发到服务器,重新呈现所有客户端控件,就像第一次加载页面一样。由于整个页面都被重新加载,jQuery也会“忘记”控件的状态,因此这种方法也不起作用。防止这种情况的最简单方法是确保单选按钮在服务器端运行。例如:
<asp:RadioButton id="rdb1" Checked="True" GroupName="RadioGroup1" runat="server" />
<asp:RadioButton id="rdb2" GroupName="RadioGroup1" runat="server" />
希望有所帮助!
答案 3 :(得分:0)
我再说一遍,要求是ABSURD。他们如何在不查看代码的情况下告诉您使用过的服务器端控件。这就像要求你用筷子或其他东西编写代码。
然而,正如练习一样,我提供了以下解决方案:
<input id="rdb1" type="radio" name="rbdData" value="rbd1" <%= Rdb1Checked %> />
<input id="rdb2" type="radio" name="rbdData" value="rbd2" <%= Rdb2Checked %> />
<asp:Button ID="btnTest" runat="server" Text="Test" onclick="btnTest_Click" />
背后的代码:
protected string Rdb1Checked
{
get
{
if (IsPostBack)
{
if (Request["rbdData"] == "rbd1")
{
return "checked";
}
else
{
return "";
}
}
return "checked";
}
}
protected string Rdb2Checked
{
get
{
if (IsPostBack)
{
if (Request["rbdData"] == "rbd2")
{
return "checked";
}
else
{
return "";
}
}
return "";
}
}
问他们为什么有这些要求。也许他们不想看到客户端ID,在这种情况下,您可以将ClientIDMode设置为Static并避免自动生成的ID。您可以通过将它们设置为null等来完全删除它们。也许它们不喜欢Web窗体为单选按钮呈现的内容,在这种情况下使用服务器端输入就可以了。这个要求本身就没有意义。
答案 4 :(得分:-1)
根据定义,在ASP.NET中,所有HTML控件都从服务器控件继承。只需添加runat =“server”,您就可以从代码隐藏中访问该控件,尽管它仍然会在页面中呈现为普通的HTML控件。