Tengo un ddl en mi página maestra que está configurado para devolución automática de datos para recuperar datos en función de su selección. Los valores en la lista son customerids y se han configurado como una variable de sesión y una vez que alguien ha seleccionado cuál, el código mira a la sesión ["selectedCustomer"] y llena los campos correspondientes. Ahora, el problema con el que me he encontrado es que cuando la devolución de datos automática se realiza en Chrome o IE, completa los campos y luego el cliente seleccionado vuelve a la configuración predeterminada, que es "Seleccione el cliente", que no tiene ningún valor detrás. En Firefox, después de la devolución, llena los campos y luego la lista desplegable permanece en el cliente seleccionado.

    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)
        { }
    }

Ese es el evento selectedChanged para mi 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;
        }

Esto es lo que llena la lista desplegable. Además, cuando Firefox devuelve la publicación, no parece que la página completa se recargue, con Chrome o IE, toda la página parpadeará en blanco y se volverá a cargar. Eso me parece que tiene algo que ver con eso. Porque con Firefox, el estado de visualización que tengo para mi acordeón funciona como se supone que debe hacerlo, pero de nuevo no con Chrome o IE.

Si tiene alguna ayuda, se lo agradecería, si hay algo que pueda aclarar o cualquier fragmento de código que pueda proporcionar, haré todo lo posible para actualizar todo.

Gracias.

2
Joe W 14 may. 2012 a las 22:56
1
¿Por qué el código agrega un encabezado de respuesta Refresh?
 – 
Michael Liu
15 may. 2012 a las 06:46
Sin él, no puedo obtener la información para poblar.
 – 
Joe W
15 may. 2012 a las 17:19
¿Está redirigiendo a la misma página oa una página diferente? ¿Por qué no utilizar el método Response.Redirect?
 – 
Michael Liu
15 may. 2012 a las 18:27
Misma página, el menú desplegable está en mi página maestra, y en Firefox, la actualización, actualiza la página anidada en la página maestra, para Chrome e IE hace toda la página
 – 
Joe W
15 may. 2012 a las 18:59

1 respuesta

La mejor respuesta
 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>

No pierde la sesión, simplemente borra la selección. Así que intente manejar el evento Load de su ContentPlaceHolder estableciendo el valor seleccionado por la sesión almacenada.

1
Anyname Donotcare 15 may. 2012 a las 20:21
Esto tiene sentido, no estaba al 100% de que la sesión se estaba perdiendo, porque el valor de la opción predeterminada está establecido en nulo, y ese es el valor que se le dijo que mirara ya que el ddl vuelve a él. Apliqué el método que está sugiriendo, pero ahora no carga los resultados y simplemente lo establece en el valor predeterminado cada vez que establezco un punto de interrupción y veo si hay algo que pueda hacer para detener esto. Gracias por su respuesta.
 – 
Joe W
15 may. 2012 a las 23:42