C# ASP.NET单选按钮状态和返回键

C# ASP.NET单选按钮状态和返回键,c#,asp.net,webforms,radio-button,C#,Asp.net,Webforms,Radio Button,我有一个带有两个单选按钮的ASP.NET页面。这些按钮使用自动回发来运行服务器端逻辑。如果选择第二个按钮,页面将发回并正确显示已选择第二个按钮的消息。如果现在单击“浏览器后退”按钮,则按钮2的状态将保持选中状态,而消息将恢复为“按钮1已选中”。这会导致明显不希望出现的情况,因为单选按钮和消息的状态现在不同步。我知道这是一个缓存问题,但我觉得奇怪的是浏览器会记住标签的前一个状态,而不是单选按钮的前一个状态 处理这种情况的最佳方法是什么?在这种情况下,禁用缓存或使用“后退”按钮是不可取的 以下代码示

我有一个带有两个单选按钮的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>
嗯,真有趣

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

现在,后退按钮有点棘手。主要是因为你对此无能为力。。。HTTP现在和将来都是无状态的,客户端上的“后退”按钮离web服务器“很远”。你无法控制它

作为一篇关于类似主题的文章,你可以阅读

我想说的是,尽管我不明白为什么浏览器呈现的内容似乎与消息来源所说的有所不同,但我担心您在这场战斗中正在输掉一场战斗


我目前唯一能想到的就是找到一些我无法提供的智能JavaScript,在用户点击后退按钮后,它可以“做点什么”让浏览器重新绘制屏幕。

w我们的问题非常简单

  • 在标记中,可以使用checked=“false”或任何asp.net等效项

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

  • 下面是一个例子:

    if(!IsPostBack)
    {
       rb1.Checked = false;
       rb2.Checked = false;
    
       //or alternatively set the value from server data
    }
    
  • 在点击后退按钮的情况下,浏览器已经缓存了页面。由于在标记或代码中,这两个复选框均未标记为checked=“false”,因此浏览器将按缓存中的状态加载页面 如果要更改选中的单选按钮,请使用#2设置组的值,因为PageLoad事件在预渲染和渲染之前执行

    if(!IsPostBack)
    {
       rb1.Checked = false;
       rb2.Checked = false;
    
       //or alternatively set the value from server data
    }