回发后保持下拉列表选中状态及取消默认值设置问题
解决你的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
相关产品推荐
相关产品推荐

