Un gran problema con las páginas que usan AJAX en general, es que, por diseño, cada acción no representa un estado en su navegador, lo que significa que no puede usar los botones Back y Forward para cambiar entre estados, y debido a que la URL no cambia, no se puede guardar en favoritos un estado específico o utilizarlo como enlace.

Esto realmente limita las situaciones en dónde podemos usar AJAX en general y el control UpdatePanel en especial. Afortunadamente, Microsoft ha resuelto este problema con la característica llamada "EnableHistory" del control ScriptManager.

Básicamente, trabaja agregando información a la URL después del caracter #, el que es normalmente usado para navegar entre varias partes de la misma página.

En este artículo, crearé una página que nos mostrará el problema, para después ver de que manera se arregla con la nueva característica.

<%@ Page Language="vb" AutoEventWireup="false"
            CodeBehind="History2.aspx.vb"
            Inherits="Ajax.History2" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
     <title>Problema del Historial en Ajax</title>
    <script type="text/javascript" 
               src="script/jquery-1.7.2.js"></script>
</head>
<body>
    <h1>Problema del Historial en Ajax</h1>
    <form id="form1" runat="server">
    <asp:ScriptManager runat="server" ID="MainScriptManager" />
    <asp:UpdatePanel runat="server" ID="pnlColorSelect">
        <ContentTemplate>
            <asp:DropDownList runat="server" ID="ddlColor"
     AutoPostBack="true" 
     OnSelectedIndexChanged="ddlColor_SelectedIndexChanged">
                <asp:ListItem Value="">
                      --Elija un color--
                </asp:ListItem>
                <asp:ListItem Value="Red">
                      Red
                </asp:ListItem>
                <asp:ListItem Value="Pink">
                      Pink
                </asp:ListItem>
                <asp:ListItem Value="LightBlue">
                     LightBlue
                </asp:ListItem>
                <asp:ListItem Value="LightGreen">
                     LightGreen
                </asp:ListItem>
                <asp:ListItem Value="LightYellow">
                     LightYellow
                </asp:ListItem>
            </asp:DropDownList>
            <br />
            <br />
            Color seleccionado:
            <asp:Label runat="server" ID="lblSelectedColor" />
        </ContentTemplate>
    </asp:UpdatePanel>
    </form>
    <script type="text/javascript">
        $(document).ready(function () {
            $("select > option").first().css("color", "#CCCCCC");
        });

        var prm = Sys.WebForms.PageRequestManager.getInstance();

        prm.add_endRequest(function () {
            $("select > option").first().css("color", "#CCCCCC");
        });
    </script> 
</body>
</html>
Haga su donación para colaborar con La Escuela del Programador

La Escuela del Programador es un sitio web sin anuncios, sin ánimo de lucro, no es un sitio web comercial. Es el sueño de compartir con todos, muchos años de una gran pasión. Si realmente encuentra este sitio útil y lo aprovecha, le pido su generosa y no importa cuán modesta colaboración, simplemente para afrontar los costos de mantener este sitio disponible en internet.
No deseo lucrar con este sitio, ya que lo hago desinteresadamente, sólo le pido que, si puede, aporte (desde un dólar hasta lo que crea que puede dar), para afrontar los costos de dominio y hosting. Muchísimas gracias y ojalá juntos podamos hacer un sitio que sea una buena fuente de aprendizaje de programacíon en español.

Si no se siente en condiciones de colaborar, igualmente será bienvenido al sitio, es libre para todos y será un placer que encuentre mis artículos provechosos, pero si realmente me ayuda con una donación minima, seguramente, colaborará para que La Escuela del Programador se mantenga en la Web y crezca, conviertiendo a este sitio hecho con mucha pasión, dedicación y esfuerzo, en una buena fuente de aprendizaje.

Mis saludos cordiales y gracias por interesarse en mi sitio.

Rubén E. Spagnuolo
respag
Panamá - © 2012