【问题标题】:asp post back issue and html controlsasp回发问题和html控件
【发布时间】:2012-02-24 09:37:46
【问题描述】:

我的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 时,页面被刷新并选择第一个重做按钮。为了防止这种情况,我像这样尝试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);
            }
        });

但它不起作用。我们如何处理这种情况。我哪里出错了。任何想法或任何替代方案。谢谢。

【问题讨论】:

  • 在bind() 事件中尝试e.preventDefault

标签: c# jquery asp.net


【解决方案1】:

如果这是请求,我建议您有一个隐藏字段(服务器端),它将保持选择输入单选按钮的状态(当用户单击单选按钮时,使用 jquery 更新隐藏字段)。然后在回发时,因为隐藏字段设置为 runat="server",它将保持其值(视图状态),您可以简单地使用 jquery 将右侧单选按钮设置为选中状态。这有意义吗?

【讨论】:

    【解决方案2】:

    我再说一遍,这个要求是荒谬的。他们如何在不查看代码的情况下告诉您使用了服务器端控件。这就像要求你用筷子或其他东西写代码一样。

    不过,作为练习,我提供以下解决方案:

    <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 设置为静态并避免自动生成 ID。您可以通过将它们设置为 null 等来完全删除它们。也许他们不喜欢 Web 窗体为单选按钮呈现的内容,在这种情况下,使用服务器端输入就可以了。这个要求本身是没有意义的。

    【讨论】:

      【解决方案3】:

      什里

      事实上,客户端点击(由 jQuery 添加)在调用服务器之前执行。如果您想保留选择项,请尝试使用服务器端控件:

      <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" />
      

      如果它对你有用,试试这个。

      希望对你有帮助。

      【讨论】:

      • 我无法使用server side 控件。这是我的项目需求。这是我面临的示例问题。
      【解决方案4】:

      当点击“测试”按钮时,页面回传到服务器,服务器重新呈现所有客户端控件,就像页面第一次加载一样。由于重新加载了整个页面,jQuery 也会“忘记”控件的状态,因此这种方法也不起作用。防止这种情况的最简单方法是确保单选按钮在服务器端运行。例如:

      <asp:RadioButton id="rdb1" Checked="True" GroupName="RadioGroup1" runat="server" />
      <asp:RadioButton id="rdb2" GroupName="RadioGroup1" runat="server" />
      

      希望有帮助!

      【讨论】:

      • 我无法使用server side 控件。这是我的项目需求。这是我面临的示例问题。
      • 嗯,Button 是一个服务器端控件,您正在使用它。
      • Yap 项目很大,它是一个项目需求。我不能在这里发布所有东西。这是一个条件。所以我已经提到你那个按钮是服务器端的。
      【解决方案5】:

      什么意思?您的要求不允许您使用“服务器端控件”,或者您的 IDE 不允许这样做?

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

      【讨论】:

        猜你喜欢
        • 2011-01-22
        • 2018-01-18
        • 1970-01-01
        • 2016-08-26
        • 2012-10-16
        • 1970-01-01
        • 2019-09-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多