ASP.NET Repeater问题

4

我有一个重复控件,在ItemTemplate下有一个Image控件。无论如何,旧的html代码如下:

<ItemTemplate>
   <img src="<%# Eval("ImageSource") %>" alt="" />
</ItemTemplate>

我想编程设置ImageUrl,怎么办?

但是我想要检查图片是否存在于目录中,如果不存在,则可以设置为临时图片。

我有一段代码,但是......它不太起作用,所以没有显示在这里。你们能帮我吗?我应该使用ItemCreated还是ItemDataBound事件?


在stackoverflow上提问非常好,你可以立即得到回复和答案,不像在msdn论坛上那样。谢谢大家。 - jaysonragasa
5个回答

4
在模板的XML侧,您需要直接调用一个方法。
<asp:Image runat="server" ID="myImg" ImageUrl='<%# MyImageUrlFunction(Eval("DataFieldName").ToString()); %>' />

您需要在代码后台定义一个对应的公共方法:
public string MyImageUrlFunction(string field) 
{
    // put some logic here to determine url
    return imageUrl;
}

错误 4 服务器标记格式不正确。 - jaysonragasa
好的,我已经让它运行起来了。但是你的代码有一个错误,末尾不应该有分号 :) 但还是谢谢 Joel! - jaysonragasa
@Nullstr1ng - 对不起,我没有访问我的IDE,而且我一直在VB和C#之间跳来跳去,所以我的分号手指有点过于敏感了。 - Joel Etherton

2
在你的ItemDataBound中,可以做如下操作:
protected void rpt_ItemDataBound(object sender, RepeaterEventArgs e)
{
    HtmlImage img = (HtmlImage)e.Item.FindControl("img");

    string imageUrl = (string)DataBinder.Eval(e.Item.DataItem, "ImageSource");
    if (File.Exists(imageUrl))
        img.Src = imageUrl;
}

那是 System.Web.UI.HtmlControls.HtmlImage, System.Web.UI.DataBinderSystem.IO.File

1

ItemDataBound。您可以通过当前项的findcontrol事件获取控件引用,然后检查图像是否存在。您可以使用Server.MapPath(“〜/images/test.png”)获取文件路径,然后如果不存在,则注入您自己的文件。

您还可以使用客户端标记可以调用的公共方法,传递URL并提供默认值(如果不存在)。

希望对您有所帮助。


0
<ItemTemplate>
    <asp:Image ImageUrl='<%# System.IO.File.Exists(Eval("ImageSourceProperty").ToString()) ? Eval("ImageSourceProperty").ToString() : TemporaryImagePath %>' runat="server" />
</ItemTemplate>

错误 4 服务器标记格式不正确。 - jaysonragasa

0

针对错误:

服务器标记格式不正确

您应该在代码中删除额外的空格!

<%# System.IO.File......%>
should be <%#System.IO.File......%>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接