5

我遇到了一个非常正常的 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 中。

4

2 回答 2

2

您似乎误解了回发的含义;这不仅仅意味着页面刷新。当您在浏览器中点击 F5 时,原始请求将被发送到服务器,并且Page.IsPostBack将为false

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


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

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

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

于 2012-09-07T05:17:28.223 回答
1

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

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

于 2012-09-07T04:15:51.693 回答