我正在尝试从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();
}
请任何帮助
答案 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>