ASP.NET - DropDownList在Browser-Back-Button上包含错误的值

时间:2011-08-11 13:36:21

标签: asp.net drop-down-menu

我在DataList中有这个DropDownList。

<asp:DropDownList runat="server" ID="DDL_ProdCat" OnSelectedIndexChanged="DDL_ProdCat_SelectedIndexChanged" 
                  Autopostback="true" DataTextField="Name" DataValueField="ID" />

当用户在此DropDownList中进行选择时,对于某些选择,它们将被重定向到单独的页面。

重定向后,用户点击浏览器后退按钮,使用DropDownList返回此页面。

不幸的是,仍然选择将它们重定向到新页面的选择。

示例

  • DDL包含A,B - 初始选择值:A
  • 用户选择B - Postback将其重定向到另一页
  • 用户在浏览器上点击“返回”
  • 页面现在显示“B”被选中,而页面状态表明仍应选择“A”。该页面永远不会处于“B”状态,因为“B”被标记为将用户重定向到该另一页面。

当用户通过浏览器返回按钮重新访问页面时,有没有办法将DropDownList选项重置为特定值?

注意

  • 我在这里被迫使用DDL,因为常见的情况是不会发生重定向。我知道这通常不是将用户链接到其他页面的最佳选择。
  • 不幸的是,出于性能原因,我无法关闭整个页面的浏览器缓存

3 个答案:

答案 0 :(得分:4)

如果可以删除页面级浏览器缓存,则可以尝试删除缓存,以便在用户返回时重新加载页面。将其添加到页面加载:

Response.Expires = 0
Response.Cache.SetNoStore()
Response.AppendHeader("Pragma", "no-cache")

答案 1 :(得分:0)

根据建议,在页面上使用JavaScript在下拉列表中重新设置选择。

答案 2 :(得分:0)

以下代码对我有用:

<script type="text/javascript">
  window.onload = function () {
    var ControlValue = document.getElementById("<%= DropDownList.ClientID %>");
    if (ControlValue.value != origControlValue) {
      ControlValue.value = origControlValue;
    }
  }
  var origControlValue = document
    .getElementById("<%= DropDownList.ClientID %>").value;
</script>