jueves, 8 de mayo de 2014

¿Como aplicar atributo class a un control ASP.Net?

Para aplicar estilos desde un fichero *.Css a un control ASP debemos utilizar la propiedad CssClass
Veamos el siguiente ejemplo extraido de: http://stackoverflow.com/questions/1648789/how-to-style-textbox-using-css-in-asp-net

<asp:TextBox id="someid" runat="server" CssClass="textbox" />
De esto modo si en el dichero *.aspx tenemos referencia una hoja de estilos, en dicha hoja de estilos podremos hacer algo como .textbox{ width: 500px; } para aplicar el estilo a nuestro control ASP.Net

Configurar un TextBox ASP como PassWord


Si estamos programando una acceso restringido a ciertos bloques de nuestra aplicación, es muy útil utilizar un control para contraseñasa que permita al usuario identificarse sin que "ojos ajenos" puedan conocer sus credenciales de acceso.

¿Como hacemos esto en ASP.Net c#?

Basta con ir a las propiedades del textBox y en la propiedad TextMode seleccionar "Password" entre las opciones disponibles.

Fuente: http://www.daniweb.com/web-development/aspnet/threads/319465/how-to-set-passwordchar-property-to-textbox

miércoles, 7 de mayo de 2014

No se muestran las imagenes ni los estilos *.css en ASP.NET

Tenemos publicada nuestra aplicación web en ASP.Net correctamente publicada con las rutas relativas a imagenes establecidas de forma correcta, los ficheros poseen permisos en servidor para lecturas y ejecución así como exploración de los directorio de imagenes pero aún asi las imagenes y los estilos apuntados por HREF no se cargan.

Puede deberse a una configuración establecida en el web.config

si tenemos definidos un controlador estatico que sirve los contenidos del tipo ...

<httpHandlers>

.......
</httpHandlers>

debemos incluir para que sirva las imagenes y los estilos del siguiente modo..

<httpHandlers>
    <add verb="*" path="*/_images/*.jpg" type="ImageAsyncHandler"/>
    <add verb="GET" path="*.jpg" type="System.Web.StaticFileHandler" /></httpHandlers>


Fuente: http://forums.asp.net/t/1034351.aspx?Using+the+HttpHandler+with+the+JPG+extention

lunes, 5 de mayo de 2014

Error No se pudo analizar el mensaje recibido del servidor

Al colocar un boton para exportar un gridView a Excel nos devuelve el error "No se pudo analizar el mensaje recibido del servidor" la solución es colocar una sentencia Trigger indicando el boton que usamos para exportar con la propiedad PostBackTrigger y lo colocaremos al terminar al etiqueta </ContetTemplate>

Quedando así...


            <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                <ContentTemplate>
                    <div class="ventas">
                            <div>
                                <asp:ImageButton ID="imgImprimirGrid" runat="server" ImageUrl="~/Images/imprimir.jpg" OnClick="imgImprimirGrid_Click" />
                            </div>                      
                       
                            <h3>Informe de ventas de franquicias </h3>

                            <asp:GridView ID="GridView1" runat="server" BackColor="White" BorderColor="#999999" BorderStyle="Solid" BorderWidth="1px" CellPadding="3" Font-Names="Verdana" Font-Size="10px" ForeColor="Black" GridLines="Vertical" Height="151px" OnRowCommand="GridView1_RowCommand" Width="100%">
                                <AlternatingRowStyle BackColor="#DDDDDD" />
                                <FooterStyle BackColor="#CCCCCC" />
                                <HeaderStyle BackColor="#B7E4DD" Font-Bold="True" ForeColor="#666666" />
                                <PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
                                <SelectedRowStyle BackColor="#000099" Font-Bold="True" ForeColor="White" />
                                <SortedAscendingCellStyle BackColor="#F1F1F1" />
                                <SortedAscendingHeaderStyle BackColor="#808080" />
                                <SortedDescendingCellStyle BackColor="#CAC9C9" />
                                <SortedDescendingHeaderStyle BackColor="#383838" />
                            </asp:GridView>                      
                       
                    </div>
                </ContentTemplate>
                <Triggers> <asp:PostBackTrigger ControlID="imgImprimirGrid" /> </Triggers>
            </asp:UpdatePanel>

Error El control 'GridView1' debe colocarse dentro de una etiqueta de formulario con runat=server.

La solución es colocar en nuestro fuente el codigo VerifyRenderingInServerForm del siguiente modo:


protected void Page_Load(object sender, EventArgs e){
...
}

public override void VerifyRenderingInServerForm(Control control)
{
  /* Confirms that an HtmlForm control is rendered for the specified ASP.NET
     server control at run time. */
}



Veamos mas detalles para aclararlo


Fuente0: http://stackoverflow.com/questions/6343630/gridview-must-be-placed-inside-a-form-tag-with-runat-server-even-after-the-gri


You are calling GridView.RenderControl(htmlTextWriter), hence the page raises an exception that a Server-Control was rendered outside of a Form.
You could avoid this execption by overriding VerifyRenderingInServerForm
public override void VerifyRenderingInServerForm(Control control)
{
  /* Confirms that an HtmlForm control is rendered for the specified ASP.NET
     server control at run time. */
}
See here and here.


Fuente1: http://aspalliance.com/771_CodeSnip_Exporting_GridView_to_Excel


In this code snippet, I will show how you can export data from a GridView control to a Microsoft Excel spreadsheet.
The Code
Listing 1: Default.aspx
<form id="form1" runat="server">
  <div>
  <asp:GridView ID="GridView1" runat="server">
  </asp:GridView>
  </div>
  <br />
  <asp:Button ID="BtnExport" runat="server" OnClick="BtnExport_Click"
  Text="Export to Excel" />
</form>
Listing 2: Default.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
  if (!Page.IsPostBack)
  {
    BindData();
  }
}
 
private void BindData()
{
  string query = "SELECT * FROM Categories";
  SqlConnection myConnection = new SqlConnection(ConnectionString);
  SqlDataAdapter ad = new SqlDataAdapter(query, myConnection);
  DataSet ds = new DataSet();
  ad.Fill(ds, "Categories");
  GridView1.DataSource = ds;
  GridView1.DataBind();
}
 
private string ConnectionString
{
  get { return @"Server=localhost;Database=NorthWind;Trusted_Connection=true"; }
 
}
protected void BtnExport_Click(object sender, EventArgs e)
{
  Response.Clear();
  Response.AddHeader("content-disposition""attachment;filename=FileName.xls");
  Response.Charset = "";
 
  // If you want the option to open the Excel file without saving then
  // comment out the line below
  // Response.Cache.SetCacheability(HttpCacheability.NoCache);
  Response.ContentType = "application/vnd.xls";
  System.IO.StringWriter stringWrite = new System.IO.StringWriter();
  System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
  GridView1.RenderControl(htmlWrite);
  Response.Write(stringWrite.ToString());
  Response.End();
}
 
In the above listing, the GridView control will be populated with the data from the Categories table of the Northwind database. You will have to give the appropriate Server name or IP instead of localhost as server name in the above connection string.
If you use this code and try to export the GridView control, you will see an error message saying that the GridView control must be placed inside the form tags with the runat = server attribute.
This is pretty confusing, since your GridView is already inside the form tags and also contains the runat = server attribute. You can easily resolve this error by adding the following lines.
Listing 3: Overiding VerifyRenderingInServerForm Method
public override void VerifyRenderingInServerForm(Control control)
{
  /* Confirms that an HtmlForm control is rendered for the specified ASP.NET
     server control at run time. */
}
Yup, that’s it. Now, when you click the button, the GridView control will be exported correctly. It will prompt you either to open the file as it is or to save it elsewhere.

Fuente2: http://forums.asp.net/t/1016960.aspx?Problem%20with%20GridView%20s%20RenderControl

No me funciona el evento CheckedChanged de un RadioButton en ASP .Net C#


Tenemos un control RadioButton al que  asignamos el evento CheckedChanged pero el evento no se dispara nunca. Para solucionarlo basta con que las propiedades AutoPostBack está habilitada a true y que ViewStateMode esta Enabled. (Mirar imagen de la derecha) de cada uno de los controles RadioButton que intervengan en el algoritomo.

"A CheckBox control must persist some values between posts to the server for this event to work correctly. Be sure that view state is enabled for this control."
Fuente: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.checkbox.oncheckedchanged.aspx


viernes, 2 de mayo de 2014

PageRequestManagerTomeoutException: Se agotó el tiempo de espera de la solicitud del servidor ASP .NET C#

Si el IDE os lanza este error se debe a que el tiempo de procesado es muy largo. Si estais convencidos de que todo es correcto pero simplemente requiere mas tiempo necesitais añadir la propiedad
AsyncPostBackTimeout ="360000" al objecto ScriptManager de vuesta aplicación de modo que quedaría algo así.

 <asp:ScriptManager ID="ScriptManager1" runat="server" AsyncPostBackTimeout ="360000">
            </asp:ScriptManager>

la cantidad 360000 está expresada en segundos. Podeis estimar el tiempo maximo que necesitará vuestro script e indicarlo en segundos. Así evitaremos bloqueos injustificados.

Jesús Moreno - Ingeniero Ténico Informático - consultor Informático

Hola, soy Jesús Moreno Ingeniero Técnico Informático en sistemas por la US y propietario de éste blog. Mi trabajo en los ultimos años se ...