2010-07-24 7 views
3

Im utilisant un contrôle de répéteur et un databinder pour afficher des données de la base de données à mon site Web. exemple: DataBinder.Eval (Container, « DataItem.title »)Databinder.Eval et Substring

Parfois, le texte est trop long Normalement, j'utiliser pour afficher la sous-chaîne chaîne préférée en longueur. Mais comment faire avec le DataBinder Et si le texte est trop long (> 20 caractères), je veux le tronquer et laisser trois points derrière. Comment faire cela?

Répondre

2

Je vous suggère une méthode d'extension pour faire le levage de charges lourdes, afin de rendre le balisage aussi simple que possible:

public static string EvalTrimmed(this RepeaterItem container, string expression, int maxLength) 
{ 
    string value = DataBinder.Eval(container, expression) as string; 
    if (value != null) 
     return null; 
    if (value.Length > maxLength) 
     value = value.Substring(0,maxLength) + "..."; 
    return value; 
} 

utiliser ensuite dans le balisage comme:

<%# Container.EvalTrimmed("DataItem.Title", 20) %> 
0

Si vous utilisez le contrôle ASP.net Repeater cuit, une réponse consisterait à gérer l'événement Repeater.ItemDataBound. S'il s'agit d'un autre contrôle de répéteur tiers, cela exposera probablement un événement similaire que vous pouvez gérer pour obtenir le même effet.

Vous pouvez ensuite rogner le texte transmis à DataBinder.Eval au nombre de caractères requis et coller des ellipses à la fin.

+0

Ce binds le balisage très étroitement à un code, qui pourrait avoir besoin d'être répété à plusieurs endroits sur plusieurs pages. Je préférerais une approche déclarative chaque fois que possible. – driis