【问题标题】:Dropdownlist selectedindex doesn't work on page refreshDropdownlist selectedindex 在页面刷新时不起作用
【发布时间】:2012-09-07 03:57:46
【问题描述】:

我遇到了一个非常普通的 ASP.NET 下拉列表的问题。 我在AutoPostback=false 的页面中有一个下拉列表。 以及生成下拉列表内容的代码:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        this.dropDownList.Items.Add(new ListItem("text1", "value1"));
        this.dropDownList.Items.Add(new ListItem("text2", "value2"));
        this.dropDownList.SelectedIndex = 0;
    }
}
  • 运行页面,选择第二个选项:text2。
  • 然后,按F5,这会做一个页面加载(注意我还没有做任何回发,只是改变了Dropdownlist的选中项并按F5)

我希望下拉列表现在会选择带有index = 0 的默认项目,但所选项目仍然是项目“text2”——我选择的项目。在这种情况下,this.dropDownList.SelectedIndex = 0; 不起作用。

我完全不明白。谁能帮帮我?

更新:此行为仅在 Firefox 中发生,在 Chrome/IE 中不会发生。

【问题讨论】:

  • 当您执行自动回发时,如果页面 if(!ispostaback) 块没有命中,并且您将 txt2 作为选定移动 >this.dropDownList.SelectedIndex = 0;超出 !ispostback 块
  • 但我正在做 AutoPostBack=false 和代码 this.dropDownList.SelectedIndex = 0;被击中
  • 糟糕的是,我无法阅读有问题的内容

标签: asp.net drop-down-menu pageload


【解决方案1】:

您似乎误解了 post back 的含义;它确实意味着只是页面刷新。当你在浏览器中按F5时,原始请求将被发送到服务器,Page.IsPostBack将为false

如果您想进行实际的回发,请将asp:Button 服务器控件添加到页面并单击它(或者只是在 DropDownList 上设置AutoPostBack=true)。


似乎 Firefox 正在执行某种客户端缓存,因此当您按下 F5 时,它不会再次往返服务器。您可以通过在页面加载时重置 select 元素来解决此问题。

<script type='text/javascript'>
    document.getElementById('<%= dropDownList.ClientID %>').selectedIndex = 0;
</script>

(注意:将其放在页面底部,以便在文档加载后执行。)

【讨论】:

  • 感谢您的解释。我在这里要做的是处理用户按下 F5 按钮(或按下浏览器中的刷新按钮)的情况。
  • @user1514431 我更新了答案以更好地解决您的问题。
  • 太棒了!我这样做也是为了解决 FF 问题。但我也在寻找更好的解决方案,因为这种行为不仅发生在下拉列表中,而且发生在页面中的每个控件(文本框、复选框......)中。至少我们在这里得到了一个解决方案作为最后的手段。
【解决方案2】:

当您按 F5 时,它将随请求一起发送帖子标题。
您的最后一个请求是选择第二个选项。这样就被选中了。

如果您再次输入网址,或在地址栏中按回车键;您不会发送帖子数据。 在这种情况下,您的 SelectedIndex 将为 0。

【讨论】:

  • 这真的很有趣。那么,有没有办法忘记最后一个请求,只选择我想要的第一项?
  • F5 用于重新发送最后一个请求。您可以查看 html5 历史 API。它可能会有所帮助。您也可以在 javascript 中收听 F5 并设置location.href
  • 我明白了你的想法,似乎使用 JavaScript 捕捉 f5 并重定向到同一页面是最简单的方法。我希望 JavaScript 也知道用户何时按下浏览器中的刷新按钮。
  • 原来你的回答不正确,因为我还没有做任何回发,所以我的最后一个请求是第一次加载。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-11
  • 2015-02-16
  • 2022-01-16
  • 1970-01-01
  • 2016-08-07
  • 2017-12-28
  • 2023-03-03
相关资源
最近更新 更多