2010-09-06 112 views
4

我有一箇中繼器控件,並在ItemTemplate下,我有圖像控件。無論如何,舊的ASP.NET中繼器問題

如何以編程方式設置ImageUrl?

不管怎麼說,老的html代碼我是這樣的:

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

但我想檢查圖像中的目錄存在,或不那麼我可以設置與臨時圖像。

我有一個代碼,但..它不是真的工作,所以沒有意義在這裏顯示它。你們能幫我嗎?我應該使用ItemCreated還是ItemDataBound事件?

+0

很高興在這裏問一下在stackoverflow,你可以得到答覆和立即回答,不像在MSDN論壇。多謝你們。 – jaysonragasa 2010-09-06 20:25:43

回答

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; 
} 
+0

錯誤服務器標記格式不正確。 – jaysonragasa 2010-09-06 20:09:59

+0

好吧我得到它的工作。但是你的代碼有錯誤。最後不應該有分號:)但感謝Joel! – jaysonragasa 2010-09-06 20:16:29

+0

@ Nullstr1ng - 對不起。我沒有訪問我的IDE,我一直在VB和C#之間來回跳動,所以我的;手指有點觸發快樂。 – 2010-09-06 21:12:27

1

的ItemDataBound。您可以通過當前項目的findcontrol事件獲取控件引用,然後檢查圖像是否存在。您可以使用Server.MapPath(「〜/ images/test.png」)獲取文件路徑,如果沒有,請注入您自己的文件路徑。

您還可以使用客戶端標記可以調用的公共方法,傳入URL並提供默認值(如果不存在)。

HTH。

3

在你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.HtmlImageSystem.Web.UI.DataBinderSystem.IO.File

+0

這個看起來不錯!謝謝Dan – jaysonragasa 2010-09-06 20:17:18

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

錯誤服務器標記格式不正確。 – jaysonragasa 2010-09-06 20:07:53

0

的錯誤

服務器標籤不規範

你應該在你的代碼中刪除多餘的空間!

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

我想你忘了發佈你的代碼示例 – Bassetassen 2012-10-10 19:49:30