如何在从代码隐藏添加图像时在 GridView 中呈现图像

本文关键字:图像 GridView 添加 代码 隐藏 | 更新日期: 2023-09-27 17:56:00

我正在尝试从代码隐藏在网格视图的第一列中设置图像,但 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();
    }

请任何帮助

如何在从代码隐藏添加图像时在 GridView 中呈现图像

默认情况下,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>