我正在尝试显示撰写评论的用户的头像。我正在使用listview来显示“评论,日期,用户名和imageAvatar”,但无法弄清楚是什么问题..
<asp:Image ID="DisplayAvatarShout"
runat="server"
AlternateText='<%# Eval ("UserName") %>'
ImageUrl='~/images/user_images/<%# Eval ("Avatar") %>'
width="20px" />
<img src='~/images/user_images/<%# Eval ("Avatar") %>'
width="20px"
alt='<%# Eval ("UserName") %>' />
这是Sql连接,可能有问题
SelectCommand="SELECT aspnet_Users.UserName, Custon_Shouts.Body_shout, Custon_Shouts.Date_shout, Custon_UserInfo.Avatar FROM aspnet_Users INNER JOIN Custon_Shouts ON aspnet_Users.UserId = Custon_Shouts.UserId INNER JOIN Custon_UserInfo ON aspnet_Users.UserId = Custon_UserInfo.UserId ORDER BY Custon_Shouts.Date_shout DESC">
</asp:SqlDataSource>
呈现HTML
<img id="ContentPlaceHolder1_ListView3_DisplayAvatarShout_1" src="images/user_images/%3C%25#%20Eval%20(%22Avatar%22)%20%25%3E" alt="rokky" style="width:20px;" /> <img src='~/images/user_images/022.jpg' width="20px" alt='rokky' />
答案 0 :(得分:4)
假设Avatar
列中指定的图像实际存在于服务器上的路径中,并且在SqlDataSource中有一个包含有效数据的结果集,那么您应该能够写:
<asp:ListView ID="foo" runat="server" DataSourceID="MySqlDataSource" >
<ItemTemplate>
<asp:Image ID="DisplayAvatarShout" runat="server"
ImageUrl='<%# Eval("Avatar", "~/images/user_images/{0}")%>'/>
</ItemTemplate>
</asp:ListView>
<asp:SqlDataSource ID="MySqlDataSource">
<SelectCommand="your SQL statement">
</asp:SqlDataSource>
答案 1 :(得分:3)
这个标签肯定不会按照你的想法做到:
<img src='~/images/user_images/<%# Eval ("Avatar") %>'
width="20px"
alt='<%# Eval ("UserName") %>' />
您正在使用带有~
字符的服务器端相对路径表示法,这意味着没有客户端。浏览器不知道该文件的位置。
解决这个问题的一种快速方法是将runat="server"
添加到标记中,这将向ASP.NET引擎指示在将标记显示到客户端之前需要处理标记。这将导致服务器端路径被转换为有意义的客户端路径(无论如何,它最好,在这种情况下它可以)。另一种选择是使用页面的相对路径,例如../images/user_images/
(或任何路径)。
至于<asp:Image>
标记无效的原因,您能否显示该标记的呈现HTML输出?如果图像未在Web浏览器中显示,则可能由于多种原因。标签可能不会像您认为的那样呈现。或者可能无法从网络访问图像。或者路径可能是错误的。等
修改:根据您对上述问题的评论,您的<asp:Image>
代码正在呈现为:
<img id="ContentPlaceHolder1_ListView3_DisplayAvatarShout_1"
src="images/user_images/%3C%25#%20Eval%20(%22Avatar%22)%20%25%3E"
alt="rokky" style="width:20px;" />
要调试此问题,您最大的线索是Eval
适用于Username
,但适用于Avatar
。问问自己,这两者有什么区别?我看到的唯一区别是其中一个是自己调用而另一个(不工作的)是一个更大的字符串的一部分。
幸运的是,Eval
方法有办法处理这个问题。而不是:
ImageUrl='~/images/user_images/<%# Eval("Avatar") %>'
试试这个:
ImageUrl='<%# Eval("Avatar", "~/images/user_images/{0}") %>'
这是一种将Avatar
值注入字符串其余部分的更简洁方法。