如何在代码隐藏中添加图像时在gridview中渲染图像

时间:2016-07-08 17:10:23

标签: c# asp.net gridview

我正在尝试从gridbehind在gridview的第一列中设置图像,但img标记显示为不呈现为img的文本

我的代码

  protected void Page_Load(object sender, EventArgs e)
    {
        RdfDA DA = new RdfDA();
        DataTable dt = new DataTable();

        List<Player> Players = DA.GetPlayers();

        dt.Columns.Add("Photo");
        dt.Columns.Add("PlayerName");
        dt.Columns.Add("Team");
        dt.Columns.Add("Result");
        dt.Columns.Add("Award");

        foreach(Player Player in Players)
        {
            dt.Rows.Add(new object[] {
                "<img href=\"" + Player.PlayerImg + "\"/>",
                Player.PlayerName,
                Player.PlayerTeam,
                Player.PlayerResult,
                Player.PlayerAward                                               
                });
        }

        GVPlayers.DataSource = dt;
        GVPlayers.DataBind();
    }

请任何帮助

1 个答案:

答案 0 :(得分:1)

默认情况下,GridView HtmlEncode 设置为 true ,这将执行您所看到的内容并将HTML显示为文本。

如果您控制这些值,最简单的方法是在GridView中将其设置为false。

<asp:BoundField DataField="Photo" HeaderText="Photo" HtmlEncode="false" />

如果您允许对照片字段进行外部输入,请确保您正在清理输入以防止任何攻击。见https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.boundfield.htmlencode(v=vs.110).aspx

  

HTML编码字段值有助于防止跨站点脚本   显示攻击和恶意内容。这个性质   应尽可能启用。

前端代码更直观的方法是使用TemplateField并使用它来控制HTML输出。

更改循环

dt.Rows.Add(Player.PlayerImg,
       Player.PlayerName,
       Player.PlayerTeam,
       Player.PlayerResult,
       Player.PlayerAward                                               
});

然后在前面的代码中使用它

<asp:TemplateField HeaderText="Photo">
    <ItemTemplate>
        <asp:Image ID="imgPlayer" runat="server" ImageUrl='<%# Eval("Photo") %>' />                    
    </ItemTemplate>
</asp:TemplateField>