Prevent HTML encoding in auto-generated GridView columns

前端 未结 7 2078
渐次进展
渐次进展 2020-11-27 06:46

I have a GridView bound to a DataTable that I construct. Most columns in the table contain the raw HTML for a hypelinklink, and I would like that HTML to render as a link i

相关标签:
7条回答
  • 2020-11-27 07:44

    Simply set the BoundColumn.HtmlEncode property to false:

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


    I am afraid that there is no easy way to disable HTML encoding of the contents in a GridView with AutoGenerateColumns= true. However, I can think of two workarounds that might solve the problem you are facing:

    Option 1: Inherit the GridView class, override the Render method, loop through all cells, decode their contents, before executing the base method:

    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);
        }
    }
    

    Option 2: In a class inheriting from GridView or in the Page or Control using it, make your own inspection of the DataTable and create an explicit BoundColumn for each column:

    foreach (DataColumn column in dataTable.Columns)
    {
        GridViewColumn boundColumn = new BoundColumn
            {
                DataSource = column.ColumnName,
                HeaderText = column.ColumnName,
                HtmlEncode = false
            };
        gridView.Columns.Add(boundColumn);
    }
    
    0 讨论(0)
提交回复
热议问题