2009-04-07 16 views
6

me gustaría hacer algo como esto en ASP.Net 2.0:Prueba de un Container.DataItem con código en línea

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

Pero no se puede probar la DataBinder.Eval (Container.DataItem, "MyProperty") como esta.

NOTA: No tengo acceso al código fuente, solo puedo cambiar el aspx en línea.

NOTA 2: sé que puedo usar esto:

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

pero yo estaba buscando una forma más limpia.

¿Hay alguna manera de probar el Container.DataItem con el código en línea dentro de un Repeater?

Respuesta

5

Me gustaría hacer esto. Vincula su función de "visibilidad" a la propiedad visible de un asp: control literal:

<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, no hay otra manera de hacer esto.

2

Podría refactorizarlo en la secuencia de comandos del lado del servidor.

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

Y la llamada es en línea como ...

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

¿Qué pasa con el "else-case"?

Parece feo, ¡no realmente legible!

<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> 
Cuestiones relacionadas