c# - net - subproceso anulado server transfer
Obtención de la excepción de cancelación de subprocesos al utilizar Response.Redirect() (4)
Escribí el siguiente fragmento de código en una página que se encuentra en el Panel de actualización.
protected void myGrid_RowCommand(object sender, GridViewCommandEventArgs e)
{
try
{
if (e.CommandName =="EditNames")
{
long lSelectedName = Convert.ToInt64(e.CommandArgument);
Session["SelectedItem"] = lSelectedName;
Response.Redirect("EditItem.aspx");
}
else if (e.CommandName =="DeleteNames")
{
long lSelectedName = Convert.ToInt64(e.CommandArgument);
ValidName.DeleteItem(lSelectedName);
ScriptManager.RegisterStartupScript(this, GetType(), "Key", "alert(''Name deleted sucessfully'')", true);
}
}
catch (System.Threading.ThreadAbortException)
{
}
catch (Exception ex)
{
Error handling code...
}
}
Aquí, obtengo una excepción de cancelación de hilo al redireccionar. Sin embargo, lo resolví utilizando un controlador de errores System.Threading.ThreadAbortException
.
Pero no estoy seguro de por qué se produjo ese error al redirigir. Aunque resolví este problema, me gustaría saber si hay algún error en la forma en que estoy codificando o si hay alguna forma de detener la activación del error.
Da tus aportaciones ...
Tenga en cuenta que la página se encuentra en AJAX UPDATE PANEL.
Aunque resolví este problema, me gustaría saber si hay algún error en la forma en que estoy codificando.
No te equivoques, lo has hecho bien.
Se espera este error. Se lanza porque el hilo del servidor es abortado cuando se redirige. De la documentación de MSDN :
Si especifica true para el parámetro endResponse, este método llama al método End para la solicitud original, que lanza una excepción ThreadAbortException cuando se completa.
y la documentación para la sobrecarga que estás usando:
Las llamadas de redireccionamiento finalizan una excepción ThreadAbortException cuando se completa.
Es suficiente mencionar falso en el método de redireccionamiento, como, Response.Redirect ("TargetPage", falso);
Esto está sucediendo porque está redireccionando dentro de su bloque try / catch. No hagas esto
Lea este artículo: http://blogs.msdn.com/b/tmarq/archive/2009/06/25/correct-use-of-system-web-httpresponse-redirect.aspx
En lugar de finalizar la solicitud, es una buena práctica omitir la canalización de ejecución de la solicitud llamando a Context.ApplicationInstance.CompleteRequest()
.
Entonces tu código se vería como esto:
Response.Redirect("TargetPage", false); //write redirect
Context.ApplicationInstance.CompleteRequest(); // end response