2009-04-07 12 views
6

मैं ASP.Net 2.0 में कुछ इस तरह करना चाहते हैं:इनलाइन कोड के साथ एक Container.DataItem परीक्षण

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

लेकिन मैं DataBinder.Eval परीक्षण नहीं कर सकते (Container.DataItem, "MyProperty") की तरह इस।

नोट: मुझे स्रोत कोड तक पहुंच नहीं है, मैं केवल एएसपीएक्स इनलाइन बदल सकता हूं।

टिप्पणी 2: मैं जानता हूँ कि मैं इस का उपयोग कर सकते हैं:

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

लेकिन मैं एक क्लीनर तरीका के लिए देख रहा था।

कंटेनर का परीक्षण करने का कोई तरीका है। डेटाटाइम एक पुनरावर्तक के अंदर इनलाइन कोड के साथ?

उत्तर

5

मैं यह कर जाएगा। आप एक एएसपी के दृश्य संपत्ति के लिए अपने "दृश्यता" समारोह के लिए बाध्य: शाब्दिक नियंत्रण:

<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

नहीं, ऐसा करने का कोई और तरीका नहीं है।

2

आप इसे सर्वर साइड स्क्रिप्ट पर रीफैक्टर कर सकते हैं।

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

और यह इनलाइन के रूप में कॉल ...

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

क्या "और दर-मामला" के बारे में?

यह बदसूरत लग रहा है, वास्तव में पठनीय नहीं है!

<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> 
संबंधित मुद्दे