You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止DropdownList在页面刷新后恢复为默认选项

解决DropdownList在页面自动刷新后恢复默认值的问题

我完全懂你的困扰——页面每10秒自动刷新,刚选完DropdownList的选项,一刷新就回到默认的214了对吧?核心原因是页面刷新属于全新的GET请求,不是PostBack,所以Page_Load里的!IsPostBack分支会重新执行,绑定DropDownList后直接用了默认值214,完全没考虑你之前选的选项。

下面给你两种简单有效的解决方案,结合你的代码来修改:


方案一:用Session保存选中的产品ID(推荐,会话级保存)

Session是服务器端的会话存储,只要用户浏览器没关闭、会话没过期,就能保留选中值,实现起来最直接。

步骤1:在选中事件里保存选中值到Session

修改Dropdownlist1_SelectedIndexChanged方法,把用户选的产品ID存进Session:

public void Dropdownlist1_SelectedIndexChanged(object sender, EventArgs e) {
    DateTime shiftStart = DateTime.Today;
    DateTime shiftEnd = DateTime.Today.AddDays(1).AddMinutes(-1);
    int productId;
    if (int.TryParse(Dropdownlist1.SelectedValue, out productId)) {
        // 把选中的产品ID存到Session里
        Session["SelectedProductId"] = productId;
        Refreshdata(productId, shiftStart, shiftEnd);
    }
}

步骤2:在Page_Load里读取Session,恢复选中状态

修改Page_Load方法,绑定DropDownList后,优先从Session取之前的选中值,没有再用默认的214:

protected void Page_Load(object sender, EventArgs e) { 
    if (!IsPostBack) { 
        BindDropDownList();
        
        // 确定要加载的产品ID:优先用Session保存的,没有则用默认214
        int selectedProduct = 214;
        if (Session["SelectedProductId"] != null && int.TryParse(Session["SelectedProductId"].ToString(), out selectedProduct)) {
            // 设置DropDownList选中之前选的项
            Dropdownlist1.SelectedValue = selectedProduct.ToString();
        }
        
        DateTime shiftStart = DateTime.Today;
        DateTime shiftEnd = DateTime.Today.AddDays(1).AddMinutes(-1);
        Refreshdata(selectedProduct, shiftStart, shiftEnd);
    } 
}

方案二:用Cookie保存选中的产品ID(持久化保存,跨会话)

如果你希望用户关闭浏览器再打开,还能保留上次的选择,可以用Cookie(客户端存储):

步骤1:在选中事件里保存到Cookie

public void Dropdownlist1_SelectedIndexChanged(object sender, EventArgs e) {
    DateTime shiftStart = DateTime.Today;
    DateTime shiftEnd = DateTime.Today.AddDays(1).AddMinutes(-1);
    int productId;
    if (int.TryParse(Dropdownlist1.SelectedValue, out productId)) {
        // 存到Cookie,设置1天过期时间
        HttpCookie productCookie = new HttpCookie("SelectedProductId", productId.ToString());
        productCookie.Expires = DateTime.Now.AddDays(1);
        Response.Cookies.Add(productCookie);
        
        Refreshdata(productId, shiftStart, shiftEnd);
    }
}

步骤2:在Page_Load里读取Cookie恢复状态

protected void Page_Load(object sender, EventArgs e) { 
    if (!IsPostBack) { 
        BindDropDownList();
        
        int selectedProduct = 214;
        // 先检查Session(如果用户刚操作过),再检查Cookie
        if (Session["SelectedProductId"] != null && int.TryParse(Session["SelectedProductId"].ToString(), out selectedProduct)) {
            Dropdownlist1.SelectedValue = selectedProduct.ToString();
        } else if (Request.Cookies["SelectedProductId"] != null && int.TryParse(Request.Cookies["SelectedProductId"].Value, out selectedProduct)) {
            Dropdownlist1.SelectedValue = selectedProduct.ToString();
            // 同时把Cookie的值同步到Session,避免后续刷新重复读Cookie
            Session["SelectedProductId"] = selectedProduct;
        }
        
        DateTime shiftStart = DateTime.Today;
        DateTime shiftEnd = DateTime.Today.AddDays(1).AddMinutes(-1);
        Refreshdata(selectedProduct, shiftStart, shiftEnd);
    } 
}

为什么这样能解决问题?

页面自动刷新时,会触发全新的页面请求,IsPostBack为false,所以会重新执行BindDropDownList。这时候我们从Session/Cookie里取出用户之前选中的产品ID,手动设置DropDownList的选中项,再用这个ID刷新GridView,就能完美保留用户的选择了。

内容的提问来源于stack exchange,提问作者user7422837

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:46:14