asp回发问题和HTML控件

时间:2012-02-24 09:37:46

标签: c# jquery asp.net

我的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);
            }
        });

但它不起作用。我们怎样处理这种情况。我在哪里出错。任何想法或任何其他选择。谢谢。

5 个答案:

答案 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)

你是什​​么意思?您有一个不允许使用“服务器端控件”或IDE不允许的要求吗?

根据定义,在ASP.NET中,所有HTML控件都从服务器控件继承。只需添加runat =“server”,您就可以从代码隐藏中访问该控件,尽管它仍然会在页面中呈现为普通的HTML控件。