我试图在网格视图的第一列中从代码背后设置图像,但是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();
}
请你帮忙
发布于 2016-07-08 17:20:38
默认情况下,GridView
会将HtmlEncode设置为true,这将执行您看到的内容并将HtmlEncode显示为文本。
如果控制这些值,最简单的方法是在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>
https://stackoverflow.com/questions/38272138
复制相似问题