2009-04-07 6 views
6

Je voudrais faire quelque chose comme ça dans ASP.Net 2.0:Test d'un Container.DataItem avec le code en ligne

<asp:Repeater id="myRepeater" runat="server"> 
     <ItemTemplate> 
      <% if (DataBinder.Eval(Container.DataItem, "MyProperty").Equals("SomeValue")) { %> 
       <%#DataBinder.Eval(Container.DataItem, "MyProperty")%> 
      <% } %> 
     </ItemTemplate> 
</asp:Repeater> 

Mais je ne peux pas tester la DataBinder.Eval (Container.DataItem, "MyProperty") comme ce.

REMARQUE: Je n'ai pas accès au code source, je ne peux que modifier l'aspx en ligne.

NOTE2: Je sais que je peux l'utiliser:

<%#DataBinder.Eval(Container.DataItem, "MyProperty").Equals("SomeValue")?"<!--":""%> 

mais je cherchais un moyen plus propre.

Existe-t-il un moyen de tester Container.DataItem avec du code inline dans un répéteur?

Répondre

5

je ferais cela. Vous liez votre fonction "visibility" à la propriété visible d'un ASP: contrôle littéral:

<asp:Repeater id="myRepeater" runat="server"> 
    <ItemTemplate> 
     <asp:literal runat='server' id='mycontrol' 
      visible='<%# DataBinder.Eval(Container.DataItem, "MyProperty").Equals("SomeValue") %>'> 
      <%# DataBinder.Eval(Container.DataItem, "MyProperty") %> 
     </asp:literal> 
    </ItemTemplate> 
</asp:Repeater> 
-4

Non, il n'y a pas d'autre moyen de le faire.

2

Vous pouvez le retravailler sur un script côté serveur.

<script runat="server"> 
protected string ShowIfEqual(RepeaterItem Item, string SomeValue) { 
    YourTypeThatIsDataBound _item = (YourTypeThatIsDataBound)Item.DataItem; 
    return _item.MyProperty == SomeValue ? _item.MyProperty : string.Empty; 
} 
</script> 

Et l'appel en ligne comme il ...

<%#ShowIfEqual(Container, "SomeValue")%> 
1

Qu'en est-il du "else-case"?

Il semble moche, pas vraiment lisible!

<asp:Repeater id="myRepeater" runat="server"> 
    <ItemTemplate> 
     <%--(if true part)--%> 
     <asp:literal runat='server' 
      visible='<%# DataBinder.Eval(Container.DataItem,"OrderCount") > 0%>'> 
      <%# DataBinder.Eval(Container.DataItem, "OrderCount") %> 
     </asp:literal> 
     <%--(else part)--%> 
     <asp:literal runat='server' 
      visible='<%# DataBinder.Eval(Container.DataItem,"OrderCount") ==0%>'> 
      <p>yet no orders</p> 
     </asp:literal> 
    </ItemTemplate> 
</asp:Repeater> 
Questions connexes