如何在从代码隐藏添加图像时在 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
会将 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>