ASP下拉列表回发在Chrome和IE中丢失会话状态,但Firefox工作完美
本文关键字:会话状态 Firefox 完美 工作 下拉列表 Chrome IE ASP | 更新日期: 2023-09-27 18:34:11
我的母版页上有一个 ddl,它设置为自动回发以根据其选择检索数据。列表中的值是 customerid,它们已设置为会话变量,一旦有人选择了哪一个,代码就会查看 session["selectedCustomer"] 并填充相应的字段。现在我遇到的问题是,当自动回发在Chrome或IE上通过时,它会填充字段,然后将所选客户设置回默认值,即"请选择客户",这背后没有任何价值。在 Firefox 中,回发后它会填充字段,然后下拉列表将保留在所选客户上。
protected void ddlSelectedCustomer_SelectedIndexChanged(object sender, EventArgs e)
{
CustomerSelected();
Response.AppendHeader("Refresh", "0; URL=" + this.ResolveUrl("~/AcesSetup/storefront.aspx"));
try
{
ViewState["SelectedAccordionIndex"] = ((AjaxControlToolkit.Accordion)FindControl("MyAccordion")).SelectedIndex;
}
catch (Exception ex)
{ }
}
这是我的 ddl 的选定更改事件
private void CustomerSelected()
{
//clear the session variable
Session.Remove("selectedCustomer");
//user selected customer
if (ddlSelectedCustomer.SelectedIndex != -1)
{
Session["selectedCustomer"] = ddlSelectedCustomer.SelectedValue;
}
}
private void fillCustomers()
{
//save the value of the current selection to reselect later if still exists
string origSelectedItem = ddlSelectedCustomer.SelectedValue;
//check what role the user is in
string usersRole = Roles.GetRolesForUser(Membership.GetUser().UserName)[0];
MembershipUser user = Membership.GetUser();
switch (usersRole)
{
case "SalesRep":
ddlSelectedCustomer.DataSource = DAL.Util.getSalesRepCustomers((Guid)user.ProviderUserKey);
ddlSelectedCustomer.DataBind();
break;
case "BasicUser":
case "Customer":
ddlSelectedCustomer.DataSource = DAL.Util.getCustomersListForUser((Guid)user.ProviderUserKey);
ddlSelectedCustomer.DataBind();
break;
case "Admin":
case "SuperAdmin":
ddlSelectedCustomer.DataSource = DAL.Util.getAllCustomersList();
ddlSelectedCustomer.DataBind();
break;
default:
break;
}
//if user had a company selected, reselect it if it exists
if (origSelectedItem != string.Empty)
ddlSelectedCustomer.SelectedValue = origSelectedItem;
else if (ddlSelectedCustomer.Items.Count == 1)
{
//if only one item in the list, select it
ddlSelectedCustomer.Items[0].Selected = true;
}
这是填充下拉列表的内容。此外,当Firefox进行回发时,整个页面似乎不会重新加载,使用Chrome或IE时,整个页面将闪烁白色并重新加载。在我看来,这似乎与它有关。因为使用Firefox,我手风琴的视图状态可以像它应该的那样工作,但同样不是Chrome或IE。
如果您有任何帮助,我将不胜感激,如果有什么我可以清除的,或者我可以提供的任何代码狙击手,我将尽我所能更新所有内容。
谢谢。
protected void ContentPlaceHolder1_Load(object sender, EventArgs e)
{
if (Session["selectedCustomer"] != null)
{
ddlSelectedCustomer.SelectedValue = Session["selectedCustomer"].ToString();
}
}
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server" OnLoad="ContentPlaceHolder1_Load">
</asp:ContentPlaceHolder>
您不会丢失会话,只需清除选择.so 尝试通过设置存储会话的选定值来处理ContentPlaceHolder
的Load
事件。