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。

如果您有任何帮助,我将不胜感激,如果有什么我可以清除的,或者我可以提供的任何代码狙击手,我将尽我所能更新所有内容。

谢谢。

ASP下拉列表回发在Chrome和IE中丢失会话状态,但Firefox工作完美

 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 尝试通过设置存储会话的选定值来处理ContentPlaceHolderLoad事件。