2010-09-06 8 views
4

J'ai un contrôle de répéteur et sous le ItemTemplate, j'ai le contrôle d'image. Quoi qu'il en soit l'ancienRépéteur ASP.NET question

Comment puis-je définir ImageUrl par programme?

Quoi qu'il en soit, l'ancien code html j'ai été comme ceci:

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

Mais je veux vérifier si l'image existe dans le répertoire ou pas alors je peux configurer avec l'image temp.

J'ai un code mais ... ça ne marche pas vraiment, donc ça n'a pas l'air de le montrer ici. Pouvez-vous m'aider? Dois-je utiliser l'événement ItemCreated ou ItemDataBound?

+0

Il est bon de demander ici dans stackoverflow, vous pouvez obtenir les réponses et répondre immédiatement, contrairement aux forums msdn. Merci les gars. – jaysonragasa

Répondre

4

Dans le côté xml du modèle, vous devez appeler directement une méthode.

<asp:Image runat="server" ID="myImg" ImageUrl='<%# MyImageUrlFunction(Eval("DataFieldName").ToString()); %>' /> 

Vous avez besoin d'une méthode correspondante dans le code derrière défini publiquement:

public string MyImageUrlFunction(string field) 
{ 
    // put some logic here to determine url 
    return imageUrl; 
} 
+0

Erreur L'étiquette de serveur n'est pas bien formée. – jaysonragasa

+0

ok je l'ai eu le travail. Mais il y a une erreur dans votre code. Il ne devrait pas y avoir de point-virgule à la fin :) mais merci Joel! – jaysonragasa

+0

@ Nullstr1ng - désolé à ce sujet. Je n'ai pas eu accès à mon IDE et j'ai fait des allers-retours entre vb et C# ainsi mon; le doigt est un petit déclencheur heureux. –

1

ItemDataBound. Vous pouvez obtenir la référence de contrôle via l'événement findcontrol de l'élément actuel, puis vérifier que l'image existe. Vous pouvez obtenir le chemin du fichier en utilisant Server.MapPath ("~/images/test.png"), et si ce n'est pas le cas, injectez le vôtre.

Vous pouvez également utiliser une méthode publique que le balisage côté client peut appeler, transmettre l'URL et fournir une valeur par défaut si elle n'existe pas.

HTH.

3

Dans votre ItemDataBound, faire quelque chose comme:

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

C'est System.Web.UI.HtmlControls.HtmlImage, System.Web.UI.DataBinder et System.IO.File.

+0

celui-ci a l'air bien aussi! merci Dan – jaysonragasa

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

Erreur L'étiquette de serveur n'est pas bien formée. – jaysonragasa

0

pour l'erreur

La balise serveur est pas bien formé

Vous devez supprimer l'espace supplémentaire dans votre code!

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

Je pense que vous avez oublié de poster votre code – Bassetassen