Estoy usando, <base href="http://localhost:80/"> en mi página maestra para la URL base,

Ahora, cuando estoy usando el control dropdownlist en la página de contenido (ubicada en localhost:80/directory1/directory2) dentro del panel de actualización, el evento selectedindexchanged no funciona.

Traté de averiguarlo, pero en la pestaña de red de la consola firefox encontré que la solicitud busca la página de contenido en la base url solo que está en localhost:80/contenpage.aspx en lugar de localhost:80/directory1/directory2/contenpage.aspx y dando error

El recurso no puede ser encontrado.

7
Aniket Bhansali 28 ene. 2016 a las 05:23

3 respuestas

La mejor respuesta

La circunstancia relevante es que la acción del formulario se establece en una URL relativa en ASP.NET de forma predeterminada:

<form id="ctl01" action="./webform1" method="post">
    <!-- ... -->
</form>

Si usa la etiqueta base, cambia la ruta base que usa la página para interpretar las URL relativas. En su caso, la URL base apunta a una ruta que obviamente no puede servir las páginas de la aplicación. Para solucionar este problema, reconsideraría si la etiqueta base es necesaria. Si es así, debe apuntar a una URL que pueda servir las páginas de la aplicación. Para establecer la ruta base a la ruta base de la aplicación de forma dinámica, puede utilizar el siguiente código:

protected void Page_Load(object sender, EventArgs e)
{
    baseCtrl.Attributes["href"] = new Uri(Request.Url, "/").OriginalString;
}

Como solución temporal, si necesita mantener la etiqueta base como está, también intenté establecer la acción form en una URL absoluta integrando el siguiente código en la página maestra:

protected void Page_Load(object sender, EventArgs e)
{
    Page.Form.Action = Request.Url.OriginalString;
}

Esto funcionó en mi pequeña muestra para que la página pudiera ejecutar PostBack con éxito. Aunque el formulario se vuelve a publicar en la misma ubicación que si no hubiera una etiqueta base, puede haber algunos efectos secundarios porque es posible que se haga referencia a otros recursos de la página (por ejemplo, CSS, archivos JavaScript y similares) con una URL relativa y, por lo tanto, se puede recuperar desde otra ubicación. Por lo tanto, propongo reevaluar la etiqueta base antes de recurrir a esta solución.

2
Markus 18 feb. 2016 a las 19:30

Intente especificar la URL absoluta en el formulario action.

1
Qwertiy 18 feb. 2016 a las 18:47

Si tiene algún componente asp con Autopostback = "true" y ClientIdMode = "Static", ¡debe usar el triger!

Así:

<asp:UpdatePanel ID="upPrinceOffuce" runat="server">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="myCustomDropdown" EventName="SelectedIndexChanged" />
    </Triggers>
    <ContentTemplate>
         <asp:DropDownList ID="myCustomDropdown" runat="server" ClientIDMode="Static" AutoPostBack="true"
</asp:DropDownList>
    </ContentTemplate>
</asp:UpdatePanel>
1
Srinivas Ramakrishna 18 feb. 2016 a las 18:35