2009-04-07 11 views
6

mi piacerebbe fare qualcosa di simile in ASP.Net 2.0:Test di un Container.DataItem con codice inline

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

Ma non può testare il DataBinder.Eval (Container.DataItem, "MyProperty") come Questo.

NOTA: Non ho accesso al codice sorgente, posso solo modificare l'aspx in linea.

NOTA 2: So che posso usare questo:

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

ma ero alla ricerca di un modo più pulito.

C'è un modo per testare Container.DataItem con codice inline all'interno di un ripetitore?

risposta

5

farei questo. Si associa la funzione "visibilità" per la proprietà visibile di un asp: controllo letterale:

<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

No, non c'è altro modo per farlo.

2

È possibile eseguire il refactoring sullo script lato server.

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

e la chiamata è in linea come ...

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

Che dire del "resto-caso"?

Sembra brutto, non molto leggibile!

<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> 
Problemi correlati