Mostrando entradas con la etiqueta ASP. Mostrar todas las entradas
Mostrando entradas con la etiqueta ASP. Mostrar todas las entradas

martes, 16 de septiembre de 2014

Error de la validación del estado de vista MAC. Si un clúster o una granja de servidores web alojan esta aplicación ...

El error:

"Error de la validación del estado de vista MAC. Si un clúster o una granja de servidores web alojan esta aplicación, asegurése de que la configuracion <,machineKey>.."

puede deberse a que un conjunto de aplicacion comparte un pool del servidor web. Si una aplicación se encuentra un tiempo inactiva el identificador de "sesion" de la aplicación en el pool puede ser asignada a otra aplicación produciendo el error especificado. Este caso puede darse en servidores compartidos donde un pool es compartido por cuantiosas aplicaciones.

Solución:

La solución pasa por asignarnos nuestro propio identificador que no colisione con ninguna otra apliación y evitando el molesto mensaje.

1º- Para obtener un identificador accederemos a la url: http://aspnetresources.com/tools/machineKey

y pulsaremos en Generate Key. Obtendremos un resultado por pantalla como este:

<machineKey validationKey="4E96939B01AF5BF4DF800BF841A78F509DF1173511D6A7E53B5B1F874C2839082A12ECAE9B10725BC86A2E42828A5AAFDB4664DE37F52B36B0061379CD914459" decryptionKey="27958C048667A5F1FDA322026A88387E710EDA6AEA9D09EE9927C2BDAF0C1BC1" validation="SHA1" decryption="AES" />

Ya tenemos nuestro identificador-

2º Buscaremos el archivo web.config. Una vez localizado iremos a la seccion

<system.web> ... </system.web>. Dentro de esta sección pegaremos el identificador obtenido.

Con estos pasos resolveremos este molesto problema. Suerte y hasta otra.

miércoles, 27 de agosto de 2014

Permitir paginacion en un GridView usando DataReader

Para poder paginar un gridView cuyo contenido lo tenemos en una consulta SQL y ejecutada sobre un DataReader debemos de utilizar un componente compatible con IEnumerable. Por tanto directamente no es posible. Debemos usar otro objeto como por ejemplo un DataTable. Veamoslo:

private void cargarDatos(){          
           ...
            conn.Open();
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = conn;
            cmd.CommandType = CommandType.Text;
            string vConsulta = "SELECT ...."
            SqlDataReader rdr = cmd.ExecuteReader();
            if (rdr.HasRows)
            {
                    GridView1.DataSource = rdr;
                     GridView1.DataBind();
            }
           ...
}

Este código es perfectamente válido para mostrar los resultados en el GridView.

Pero supongamos que quisieramos paginar el contenido del GridView1. Para ello debemos definir la popiedad del gridView AllowPaging = true y definir su metodo pageIndexChanging

        protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            GridView gv = (GridView)sender;
            gv.PageIndex = e.NewPageIndex;
            cargarDatos();
        }

Para que funcione la paginacion deberiamos cambiar la asignacion:

 GridView1.DataSource = rdr;

por esta otra

DataTable dt = new DataTable();
dt.Load(rdr);

GridView1.DataSource = dt;

Datatable implementa IEnumerable y permite la paginacion correctamente


lunes, 16 de junio de 2014

Pasar por get una variable que contiene el caracter # almohadilla o caracteres especiales en ASP.NET C#

Realizando una aplicación en ASP.NET y C# me encontré con un problema. Tenia que pasar una variable por metodo GET y ésta contenia el caracter almohadilla #. Para solucionarlo ASP.NET C# dispone de la funcion

System.Web.HttpUtility.UrlEncode();
Asi que basta con construir nuestra cadena utilizando esta función del siguiente modo

URL = 'http://www.dominio.com?nombre_variable=' +  System.Web.HttpUtility.UrlEncode(VARIABLE_QUE_CONTIENE_CARACTERES_ESPECIALES);

Utilizando una cadena constante en lugar de Variable sería algo asi...

URL = 'http://www.dominio.com?nombre_variable=' + System.Web.HttpUtility.UrlEncode('###00012');


Suerte.

Fuente: http://stackoverflow.com/questions/3840762/how-do-you-urlencode-without-using-system-web

jueves, 12 de junio de 2014

InvalidCastException La conversion espedificada no es válida leyendo un SQLDataReader Tipo Smallint c#

Estaba lanzando una consulta sencilla y al recuperar un campo de la consulta me devolvía el error mostrado ..

si miramos el detalle de la excepcion muestra la siguiente información.. 

El problema es que tenia el campo definido en al base de datos como Smallint y al realizar la lectura del siguiente modo ...

   SqlConnection conn = null;
            conn = new SqlConnection(cloudModel.Database.Connection.ConnectionString);
            conn.Open();
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = conn;
            cmd.CommandType = CommandType.Text;

            string vConsulta = "select miCampoSmallint from miTabla;

            cmd.CommandText = vConsulta;
            SqlDataReader rdr = cmd.ExecuteReader();

            int miVariable = (int) rdr["miCampoSmallint"] => al realizar la conversion a int del campo smallint tenia el error del que hablamos. 

            La solucion es tan simple como realizar el casting con un short

            short miVariable = (short) rdr["miCampoSmallint"]

Me ha dolido la cabeza hasta darme cuenta de este error tan tonto así que espero sea de ayuda para otros. Saludos  

miércoles, 21 de mayo de 2014

Etiquetar el eje X de un Chat en ASP C#

Esta es la sintaxis:
Chart1.Series["Default"].Points[0].AxisLabel = "First Point";
Chart1.Series["Default"].Points[1].AxisLabel = "Second Point";


Esto es un copiado de la información proporcionada por Microsoft. Creo que es muy facil de comprender y completa por eso he realizado simplemente un volcado del contenido.

Fuente: http://msdn.microsoft.com/es-es/library/dd456628.aspx

Etiquetas

Visual Studio 2013
Personas que lo han encontrado útil: 1 de 1 Valorar este tema
En el control Chart, puede utilizar etiquetas para los ejes y etiquetas para los puntos de datos con el fin de hacer sus gráficos más informativos.

Utilizar etiquetas para los ejes

El control Chart etiqueta los ejes del área del gráfico de tres maneras diferentes, en orden de prioridad ascendente:
  • Etiquetar los ejes numéricamente
  • Etiquetar los ejes mediante texto
  • Etiquetar los ejes mediante etiquetas personalizadas
Estos métodos difieren principalmente en cómo se genera el texto de las etiquetas. Puede utilizar un método diferente para cada uno de los ejes. Por ejemplo, utilizar un conjunto de etiquetas personalizadas para el eje Y y etiquetas de texto para el eje X.

Dd456628.collapse_all(es-es,VS.120).gifEtiquetar los ejes numéricamente

Si un eje no contiene etiquetas personalizadas, y los datos trazados no tienen etiquetas de eje, el control Chart muestra automáticamente las etiquetas de eje en un intervalo especificado por la propiedad Axis.Interval. Para obtener más información sobre la propiedad, vea Eje

Dd456628.collapse_all(es-es,VS.120).gifEtiquetar los ejes mediante texto

Puede etiquetar el eje según el conjunto de datos particular utilizado mediante la propiedad DataPoint.AxisLabel. Una vez establecida esta propiedad con una cadena de etiqueta, el gráfico muestra la cadena de la etiqueta en el eje en la posición del punto de datos.
Nota Nota
Cuando el control Chart contiene un gran conjunto de datos, puede mostrar selectivamente las etiquetas de eje. Para asegurarse de que todas las etiquetas de eje están visibles, establezca la propiedad Axis.Interval en 1.
El siguiente ejemplo de código establece dos etiquetas en el eje para los dos puntos de datos.
Chart1.Series["Default"].Points[0].AxisLabel = "First Point";
Chart1.Series["Default"].Points[1].AxisLabel = "Second Point";

Dd456628.collapse_all(es-es,VS.120).gifEtiquetar los ejes mediante etiquetas personalizadas

Utilice las etiquetas personalizadas para proporcionar texto personalizado para los ejes. Las etiquetas personalizadas se implementan utilizando la propiedad de colecciónCustomLabels. Si utiliza etiquetas personalizadas, el área del gráfico no muestra etiquetas de eje en los puntos de datos.
Al utilizar objetos CustomLabel, deberá establecer las propiedades FromPosition y ToPosition de cada objeto CustomLabel, y estas propiedades deben especificar el ancho del área de texto de la etiqueta. No asigne el mismo valor a ambas propiedades, ya que representan un intervalo. Para colocar una etiqueta personalizada directamente bajo un punto de datos y su marca de graduación asociada, establezca la propiedad FromPosition en el valor del eje de ese punto de datos menos la mitad del intervalo de la marca de graduación y establezca la propiedad ToPosition en el valor del eje de ese punto de datos más la mitad del intervalo de la marca de graduación. Por ejemplo, si un eje tiene un intervalo de 1 (1, 2, 3…), y desea usar una etiqueta personalizada en X=2, entonces establezca las propiedades FromPosition y ToPosition en 1,5 y 2,5, respectivamente.
La propiedad RowIndex especifica en qué fila se mostrará la etiqueta personalizada. Si se utiliza una etiqueta personalizada en la primera fila de etiquetas, el área del gráfico no mostrará ninguna etiqueta de la escala del eje. Las únicas etiquetas permitidas en la segunda fila y siguientes serán las etiquetas personalizadas.

Dd456628.collapse_all(es-es,VS.120).gifFormatos y estilos de etiqueta de los ejes

Puede establecer los estilos de etiqueta de un eje mediante la propiedad LabelStyle del objeto Axis. Las propiedades de estilo de etiqueta que establezca en esta propiedad, comoLabelStyle.Font, se aplican a las etiquetas de un eje. Si las etiquetas del eje están demasiado cerca unas de otras, puede establecer propiedad LabelStyle.LabelsAutoFit oLabelStyle.Offset en True.
Al etiquetar los ejes numéricamente, también puede dar formato a los números utilizando la propiedad LabelStyle.Format.
El siguiente código muestra cómo establecer el eje Y principal con formato de divisa.
Chart1.ChartAreas["Default"].AxisY.LabelStyle.Format = "C";
El siguiente código muestra el día de semana en el eje X principal.Para obtener más información sobre cómo mostrar valores de fecha y hora como etiquetas de eje, vea Trabajar con valores de fecha y hora.
Chart1.ChartAreas["Default"].AxisX.LabelStyle.Format = "dddd";

Etiquetar puntos de datos

Puede mostrar etiquetas en los puntos de datos en el área de trazado. Para mostrar los valores de los puntos de datos como etiquetas, utilice la propiedad IsValueShownAsLabel en el objeto DataPoint o Series. Para mostrar otro texto como etiquetas de los puntos de datos, utilice la propiedad Series.Label.
Para utilizar datos en las etiquetas, utilice palabras clave en la propiedad Series.Label. En tiempo de ejecución, el gráfico reemplaza la palabra clave con los valores adecuados. Por ejemplo, el siguiente código muestra una etiqueta multilínea para cada punto de datos, con el valor Y en la primera línea y el valor X en la segunda línea.
Chart1.Series["Series1"].Label = "Y = #VALY\nX = #VALX";
Para obtener más información, vea Palabras clave.

Dd456628.collapse_all(es-es,VS.120).gifUtilizar etiquetas inteligentes

Dependiendo del tipo de gráfico, puede utilizar la propiedad Series.SmartLabelStyle para establecer etiquetas para puntos de datos que no entran en colisión.Esto resulta útil cuando se agrupan puntos de datos.
NotaNota
La propiedad Series.SmartLabelStyle no tiene ningún efecto sobre los tipos de gráficos de barrasbarras de intervalocircularanilloscolumnas de intervaloáreas apiladasáreas 100% apiladasbarras apiladasbarras 100% apiladas.
Para habilitar las etiquetas inteligentes, utilice el siguiente código.
Chart1.Series["Series1"].SmartLabelStyle.Enabled = true;
A continuación, puede utilizar propiedades de SmartLabelStyle tales como CalloutStyle y CalloutLineColor para controlar la apariencia de las etiquetas inteligentes.


lunes, 12 de mayo de 2014

intercalar comillas dobles en una cadena c# (quotes, quotedStr, quoted)

La forma de conseguir intercalar comillas dobles en una cadena es anteponiendo a la cadena el simbolo <arroba> @ y sustituir cada comilla doble por dos comillas dobles.


ejemplo:

 string cadena = "esto es una prueba";

string cadena = @""esto"" es una cadena"; => "esto" es una cadena

podemos repartirlo en varias lineas concatenando cadenas y aplicando el operador @ solamente a las cadenas que lo necesiten....


 string cadena = @""esto"" +
                            " es una " +
                            " cadena";




Fuente: http://stackoverflow.com/questions/3458046/how-to-include-quotes-in-a-string

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

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 ...