Saltar al contenido

Evitar la codificación HTML en columnas GridView generadas automáticamente

Solución:

Simplemente configure el BoundColumn.HtmlEncode propiedad a falso:

<asp:BoundField DataField="HtmlLink" HtmlEncode="false" />


Me temo que no existe una forma sencilla de deshabilitar la codificación HTML de los contenidos en una GridView con AutoGenerateColumns= true. Sin embargo, puedo pensar en dos soluciones que podrían resolver el problema al que se enfrenta:

Opción 1: Heredar el GridView clase, anula el Render método, recorrer todas las celdas, decodificar su contenido, antes de ejecutar el método base:

for (int i = 0; i < Rows.Count; i++) 
{
    for (int j = 0; j < Rows[i].Cells.Count; j++) 
    {
        string encoded = Rows[i].Cells[j].Text;
        Rows[i].Cells[j].Text = Context.Server.HtmlDecode(encoded);
    }
}

Opcion 2: En una clase heredada de GridView o en el Page o Control usándolo, haga su propia inspección del DataTable y crea un explícito BoundColumn para cada columna:

foreach (DataColumn column in dataTable.Columns)
{
    GridViewColumn boundColumn = new BoundColumn
        {
            DataSource = column.ColumnName,
            HeaderText = column.ColumnName,
            HtmlEncode = false
        };
    gridView.Columns.Add(boundColumn);
}

Pude lograr esto usando la solución que proporcionó Jørn Schou-Rode, modifiqué un poco para que funcione desde el evento RowDataBound de mi Gridview.

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
           for (int j = 0; j < e.Row.Cells.Count; j++) 
           {
               string encoded = e.Row.Cells[j].Text;
               e.Row.Cells[j].Text = Context.Server.HtmlDecode(encoded);
           }

    }
}

Otra forma es agregar algo como lo siguiente al controlador de eventos RowDataBound …

    If e.Row.RowType = DataControlRowType.Header Then
        For Each col As TableCell In e.Row.Cells
            Dim encoded As String = col.Text
            col.Text = Context.Server.HtmlDecode(encoded)
        Next
    End If
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *