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

回发后保持下拉列表选中状态及取消默认值设置问题

解决你的DropdownList刷新复位与默认值问题

看起来你有两个核心需求:一是去掉Page_Load里硬编码的214默认值,二是让页面每30秒刷新后仍保持用户之前选中的下拉选项。我来一步步帮你搞定:

一、取消硬编码的默认值214

直接删掉Page_Load里那行硬调用Refreshdata(214, ...)的代码就行。原来的代码里这行在!IsPostBack分支中,导致每次首次加载页面都会强制用214作为参数刷新数据,移除它就彻底取消了这个默认值设置。

二、刷新后保持DropdownList选中状态

整页刷新本质是发起新的GET请求,此时IsPostBack会是false,原来的选中状态自然会丢失。我们可以用Session来持久化用户选中的ProductId,具体操作如下:

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

当用户切换下拉选项时,把选中的ProductId存入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))
    {
        // 保存选中的ProductId到Session
        Session["SelectedProductId"] = productId;
        Refreshdata(productId, shiftStart, shiftEnd);
    }
}

步骤2:在Page_Load中恢复选中状态并刷新数据

修改Page_Load方法,首次加载时先检查Session里有没有保存的选中值:如果有,就恢复下拉选中状态并加载对应数据;如果没有(用户第一次访问),可以选择不加载数据,或者默认加载下拉列表第一个选项的数据(按需选择):

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        BindDropDownList();
        
        // 检查Session中是否有保存的选中ProductId
        if (Session["SelectedProductId"] != null)
        {
            int savedProductId = (int)Session["SelectedProductId"];
            // 设置DropdownList的选中项
            var selectedItem = Dropdownlist1.Items.FindByValue(savedProductId.ToString());
            if (selectedItem != null)
            {
                selectedItem.Selected = true;
                // 用保存的ID刷新数据
                DateTime shiftStart = DateTime.Today;
                DateTime shiftEnd = DateTime.Today.AddDays(1).AddMinutes(-1);
                Refreshdata(savedProductId, shiftStart, shiftEnd);
            }
        }
        // 如果你希望第一次访问时默认加载第一个选项的数据,取消下面的注释
        // else
        // {
        //     if (Dropdownlist1.Items.Count > 0)
        //     {
        //         int firstProductId = int.Parse(Dropdownlist1.Items[0].Value);
        //         DateTime shiftStart = DateTime.Today;
        //         DateTime shiftEnd = DateTime.Today.AddDays(1).AddMinutes(-1);
        //         Refreshdata(firstProductId, shiftStart, shiftEnd);
        //         Session["SelectedProductId"] = firstProductId;
        //     }
        // }
    }
}

补充:页面自动刷新的实现

你提到的每30秒刷新页面,通常可以在页面的<head>标签里添加meta标签:

<meta http-equiv="refresh" content="30">

这样页面会每30秒自动刷新,而我们通过Session保存的选中值会在刷新后被读取并恢复。

最终修改后的关键代码片段

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        BindDropDownList();
        
        if (Session["SelectedProductId"] != null)
        {
            int savedProductId = (int)Session["SelectedProductId"];
            var selectedItem = Dropdownlist1.Items.FindByValue(savedProductId.ToString());
            if (selectedItem != null)
            {
                selectedItem.Selected = true;
                DateTime shiftStart = DateTime.Today;
                DateTime shiftEnd = DateTime.Today.AddDays(1).AddMinutes(-1);
                Refreshdata(savedProductId, shiftStart, shiftEnd);
            }
        }
    }
}

public void Refreshdata(int selectedProduct, DateTime shiftStart, DateTime shiftEnd)
{
    BizManager biz = new BizManager();
    GridView1.DataSource = biz.GetPacktstatisticsForShift(shiftStart, shiftEnd, selectedProduct).DefaultView;
    GridView1.DataBind();
}

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))
    {
        Session["SelectedProductId"] = productId;
        Refreshdata(productId, shiftStart, shiftEnd);
    }
}

这样修改后,既取消了硬编码的214默认值,又能在页面刷新后保持用户之前选中的下拉选项,同时加载对应的数据。

内容的提问来源于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:09:13