martes, 28 de octubre de 2008

Forzar descarga de un archivo

Esto es para forzar la descarga de un pdf puede ser util para imagenes y/o otras cosas que los navegadores por defecto abren.

Colocar en el page_load:

Response.ClearHeaders();
Response.ClearContent();
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment; filename=mifactura.pdf");
Response.WriteFile(@"C:\Desacarga\test.pdf");
Response.End();

Esto va a hacer que el navegador pregunto donde guardar el archivo que esta en el servidor C:\Desacarga\test.pdf con el nombre mifactura.pdf


Desactivar un Boton mientras se hace el submit

Para evitar que se envíen varias veces la misma información (suele pasar cuando hay un proceso lento en el lado del servidor y un cliente impaciente), es útil desactivar el botón que provoca el postback.

        Button1.Attributes.Add("onclick", "javascript:document.getElementById('"
         + Button1.ClientID + "').disabled=true;" +
         this.GetPostBackEventReference(Button1));

Si es que se llama Button1 el botón que se quiere desactivar. Colocar esa línea dentro del onLoad de la pagina

Error No se pudo cargar viewstate

No se pudo cargar viewstate. El árbol de control en que se está cargando viewstate debe coincidir con el árbol de control que se utilizó para guardar viewstate durante la solicitud anterior. Por ejemplo, al agregar controles de forma dinámica, los controles agregados durante una devolución deben coincidir con el tipo y posición de los controles agregados durante la solicitud inicial.

Se soluciona agregando: EnableViewState=”false” al tag Page de la vista de código de la pagina aspx.

Recuperar el id del ultimo registro insertado

Algo muy comun es querer saber el id del último registro insertado, acá posteo un ejemplo de como hacer eso para una base de datos SQL Server en c#:

SqlConnection conn= new SqlConnection(

ConfigurationManager.ConnectionStrings["dbConn"].ConnectionString

);

string insertStr ="INSERT INTO [tabla]([texto],[fecha]) VALUES(@texto,getDate())

;SELECT Scope_Identity();";

SqlCommand cmd=new SqlCommand(insertStr,conn);

cmd.Parameters.Add("@texto", SqlDbType.NVarChar).Value="El texto va aca";

cmd.Connection.Open();

string ret=cmd.ExecuteScalar().ToString();

cmd.Connection.Close();

La parte clave esta en la sentencia Select Scope_Identity() del sql.