将DropDown的SelectedIndex设置为0,并将AutoPostBack设置为true

时间:2019-01-31 22:23:38

标签: c# asp.net webforms

我正在使用DropPost按钮,并且AutoPostBack设置为true。我正在尝试将DropDown重置为页面回发时的默认选择-DropDown.SelectedIndex = 0;。 DropDown确实重置为默认选择,但我无法进行选择,因为它在选择另一个选项后会立即连续恢复到默认位置“进行选择”。我不确定是否重要,但这位于更新面板中。

我需要将其重新设置为0的原因之一是,当我单击浏览器上的“后退”按钮时,选择了最后一个选择,并且如果用户尝试返回相同的选择,则将除非刷新页面,否则DropDown无效。例如。选择1将我重定向到page2。如果我单击返回,则选择1仍处于选中状态。如果单击下拉菜单再次选择选项1,则除非刷新页面,否则什么都不会发生。这是我的DropDown HTML:

<asp:DropDownList ID="DropDown" runat="server" EnableViewState="true" 
AppendDataBoundItems="true" AutoPostBack="true" 
OnSelectedIndexChanged="DropDown_SelectedIndexChanged">
                    <asp:ListItem>Make a Selection</asp:ListItem>
                    <asp:ListItem>Choice 1</asp:ListItem>
                    <asp:ListItem>Choice 2</asp:ListItem>
                </asp:DropDownList>

和C#:

if (IsPostBack)
        {                
            DropDown.SelectedIndex = 0;

        }

3 个答案:

答案 0 :(得分:0)

根据您的体验,我认为当您使用浏览器后退按钮时,正是浏览器才恢复了控制状态。

避免这种行为的一种方法是将autocomplete="off"添加到<form>元素中,例如:

<form id="form1" runat="server" autocomplete="off">
...
</form>

如果仅添加autocomplete="off"还是不够的,还可以通过发送以下标头(例如从Page_Load方法中发送)来告诉浏览器不要缓存页面:

protected void Page_Load(object sender, EventArgs e)
{
    Response.Cache.SetNoStore();
    Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
}

在尝试此解决方案之前,请记住删除执行DropDown.SelectedIndex = 0;的行。

答案 1 :(得分:0)

有两个原因:

  1. 首先需要删除:

    如果(IsPostBack) {
       DropDown.SelectedIndex = 0;
    }

启用AutoPostback="true"后,将调用page_load和OnSelectedIndexChanged事件,该事件会将SelectedIndex更改为0。

  1. 此外,需要确保Enable.ViewState属性设置为true。

答案 2 :(得分:0)

请在页面加载中使用以下代码

if (!IsPostBack)
{                
    DropDown.SelectedIndex = 0;
}