【问题标题】:ASP.NET Radio Button State and Back KeyASP.NET 单选按钮状态和返回键
【发布时间】:2011-02-15 15:31:46
【问题描述】:

我有一个带有两个单选按钮的 ASP.NET 页面。这些按钮使用自动回发来运行服务器端逻辑。如果您选择第二个按钮,则页面回发并正确显示选择了第二个按钮的消息。如果现在单击浏览器后退按钮,则按钮 2 的状态保持选中状态,而消息恢复为已选中按钮 1。这会导致明显不受欢迎的情况,因为单选按钮和消息的状态现在不同步。我知道这是一个缓存问题,但我觉得奇怪的是浏览器会记住标签的先前状态,而不是单选按钮的先前状态。

处理这种情况的最佳方法是什么?在这种情况下,禁用缓存或使用后退按钮是不可取的。

以下代码示例展示了这种行为:

[表格:]

    <asp:RadioButton ID="rb1" runat="server" AutoPostBack="true" Text="Button1" OnCheckedChanged="rb_CheckedChanged"
        GroupName="rbgroup" Checked="true" />
    <br />
    <asp:RadioButton ID="rb2" runat="server" AutoPostBack="true" Text="Button2" OnCheckedChanged="rb_CheckedChanged"
        GroupName="rbgroup" />
    <br />
    <hr />
    <asp:Label ID="lbl1" runat="server">Button 1</asp:Label>

[代码隐藏:]

protected void rb_CheckedChanged(object sender, EventArgs e)
{
    if (rb1.Checked == true)
        lbl1.Text = "Button 1";
    else
        lbl1.Text = "Button 2";
}

【问题讨论】:

    标签: c# asp.net webforms radio-button


    【解决方案1】:

    你可以试试这个。

     <script type="text/javascript">
            $(document).ready(function () {
    
                var perfEntries = performance.getEntriesByType("navigation");
    
                if (perfEntries[0].type === "back_forward") {
                    location.reload(true);
                }
            });
            
        </script>
    

    【讨论】:

      【解决方案2】:

      W你的问题很简单。

      1. 在您的标记中,您可以使用checked="false" 或任何asp.net 等效项......

      2. 在页面加载时确保使用 if(!IsPostBack){ //设置您的组值。 } 从数据源设置单选按钮的值或页面第一次加载时的默认值。以后的每一次都将被排除在外。

      所以这里是一个例子:

      if(!IsPostBack)
      {
         rb1.Checked = false;
         rb2.Checked = false;
      
         //or alternatively set the value from server data
      }
      
      1. 在点击返回按钮的情况下,浏览器已经缓存了页面。由于在您的标记或代码中,这两个复选框都没有标记为 checked="false",因此浏览器将加载页面的状态,就像它从缓存中获取的一样。

      如果要更改选择的单选按钮,请使用 #2 设置组的值,因为 PageLoad 事件在预渲染和渲染之前执行。

      【讨论】:

        【解决方案3】:

        嗯 - 这很有趣。

        我可以重现这个。令我惊讶的是 source(浏览器的查看源代码)显示正确的单选按钮已选中(按钮 1)。浏览器(我测试过 IE 和 FF)似乎没有正确呈现源代码(或者没有重绘单选按钮;或者没有显示正确的源代码)。

        现在返回按钮有点棘手。主要是因为您对此无能为力... HTTP 是并且将保持无状态,并且客户端上的后退按钮离您的 Web 服务器“很远”。你无法控制它。

        作为关于类似主题的文章,您可以阅读A Thorough Examination of "Disabling the Back Button"

        我想说的是,虽然我不明白为什么浏览器渲染的东西似乎与消息来源所说的不同,但我担心你在这里打的是一场失败的战斗。

        我目前唯一能想到的就是找到一些我无法提供的智能 JavaScript 来“做某事”以使浏览器在用户单击后退按钮后重绘屏幕。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-15
          相关资源
          最近更新 更多