2009-08-21 13 views
6

<asp:Repeater> मुझे पागल गाड़ी चला रहा है अंदर एक अगर बयान कैसे कर सकते ..मैं एक पुनरावर्तक

मैं

<ItemTemplate> 
    <% if (Container.DataItem("property") == "test") {%> 
     I show this HTML 
    <% } else { %> 
     I show this other HTML 
    <% } %> 
</ItemTemplate> 

करने की ज़रूरत है लेकिन मैं मुझे के जीवन के लिए बनाने के लिए किसी भी तरह से नहीं मिल सकता है यह हुआ। टर्नरी कोई अच्छा नहीं है, क्योंकि एचटीएमएल की मात्रा काफी बड़ी है, डाटाबिंड इवेंट के माध्यम से लेबल सेट करना बहुत अच्छा नहीं है, क्योंकि मुझे कोड-बैक में एचटीएमएल के बड़े ब्लॉक होना चाहिए।

निश्चित रूप से वहाँ यह करने के लिए एक रास्ता है ....

+4

आपके अगर कथन में आप असाइनमेंट का उपयोग कर रहे हैं तो समानता ऑपरेटर नहीं ... क्या यह एक टाइपो है या आपका वास्तविक कोड कैसा है? –

उत्तर

7

आप ViewModel वर्ग का एक प्रकार बनाने की कोशिश कर सकते हैं, अपने कोड-पीछे पर निर्णय करते हैं, और उसके बाद अपने पुनरावर्तक के साथ खुश हो, बस डेटा प्रदर्शित यह दिया जा रहा है।

यह यूआई से तर्क को अलग करने का एक तरीका है। उसके बाद आप एक गूंगा-यूआई कर सकते हैं जो कि डेटा को प्रदर्शित करता है, यह तय किए बिना कि कैसे/कैसे दिखाना है।

+1

मुझे लगता है कि यह इसका क्रूक्स है, दोहराना उपयोग करने से पहले डेटा पूरी तरह साफ है। यदि आप पुनरावर्तक में मूल तुलनाकर्ताओं का उपयोग कर सकते हैं तो जीवन अच्छा होगा। – Monsters

3

आप उपयोगकर्ता नियंत्रण के साथ ऐसा कर सकता है: जैसे मैं इस वास्तविक डेटा बाइंडिंग के साथ मिश्रित उठकर

<ItemTemplate> 
    <uc:Content1 runat='server' id='content1' visible='<%# Container.DataItem("property") == "test" %>'/> 
    <uc:Content2 runat='server' id='content2' visible='<%# Container.DataItem("property") != "test" %>'/> 
</ItemTemplate> 
+1

हाँ, मैंने ऐसा करने के बारे में सोचा, यह काम करेगा, लेकिन कुछ कामकाज होगा। मैंने फैसला किया है कि दोहराना सिर्फ कार्य के लिए नहीं है, और एक/अगले लूप के लिए चला गया है, एक इलाज करता है। – Monsters

3

लगता

आप यह इतना की तरह कर सकते हैं:

<asp:Repeater runat="server"> 
    <ItemTemplate>  
     <% if (((Product)Container.DataItem).Enabled) { %> 
     buy it now! 
     <% } else {%> 
     come back later! 
     <% } %> 
    </ItemTemplate> 
</asp:Repeater> 

+0

Container.dataitem केवल .. variable में मौजूद है? मार्कअप, उदा। <% # – Monsters

+0

आप सही हैं, मैंने सोचा कि मुझे ऐसा कुछ याद आया और अब मैं अपने कोड को देख रहा हूं, यह गैर-डेटाबेस वाले मानों पर तर्क था। –

19

वाई कहां सर्वर साइड दृश्यता का उपयोग कर सकते हैं:

<ItemTemplate> 
    <div runat="server" visible='<% (Container.DataItem("property") == "test") %>'> 
     I show this HTML 
    </div> 
    <div runat="server" visible='<% (Container.DataItem("property") != "test") %>'> 
     I show this other HTML 
    </div> 
</ItemTemplate> 
+0

यह वास्तव में एक बहुत अच्छा समाधान है। – Monsters

+0

यह एक अच्छा समाधान है यदि निर्णय तर्क परिभाषित किया जा रहा है और फ्रंटेंडर्स द्वारा उपयोग किया जा रहा है जो _ अंतर्निहित सी # कोड तक पहुंच नहीं है। – mslot

+0

एचटीएमएल को अभी भी दो बार संसाधित किया जाएगा .... बस इसके कारण दृश्यमान यह नहीं है कि संकलक कोड –

0

मुझे इसी तरह की समस्या थी और इस पृष्ठ पर ठोकर खाई। महान उत्तरों के लिए धन्यवाद, गेविन और केल्टेक्स ने मुझे सही रास्ते पर पहुंचाया लेकिन मेरे पृष्ठ पर काम करने के लिए मुझे कुछ मुश्किल समय था। अंत में मैं इस बूलियन के साथ काम करने के लिए इसे प्राप्त करने में सक्षम था, इसलिए मैं भावी पीढ़ी के लिए साझा करना चाहते थे:

दिखाएं चेकबॉक्स अगर झूठी

<asp:CheckBox ID="chk_FollowUp" Visible='<%# (DataBinder.Eval(Container.DataItem, "FollowUp").ToString() == "False") %>' runat="server" /> 

दिखाएँ करें img अगर सच

<asp:Image ID="img_FollowUp" AlternateText="Flagged" ImageUrl="Images/flag.gif" runat="server" 
    Visible='<%# DataBinder.Eval(Container.DataItem, "FollowUp") %>' Height="30" Width="30" /> 
+0

ओह के उस खंड को छोड़ देगा, और उनके बीच टॉगल करेगा: '((चेकबॉक्स) प्रेषक)। NamContainer.FindControl ("chk_FollowUp")। दृश्यमान = झूठा; ((चेकबॉक्स) प्रेषक) .NamingContainer.FindControl ("img_FollowUp")। दृश्यमान = सत्य; ' – RJB

0

सबसे पहले आपको अपने पेज.cs फ़ाइल में एक काउंटर वैरिएबल को परिभाषित करना होगा

<%if (Count == 0) 
         { 
          %> 
        <div style="background-color:#cfe9ed" class="wid_100 left special_text"><%# Eval("CompanyName") %></div> 
         <%} 
         else if (Count == TotalCount - 1) 
         { 
          %> 
         <div style="background-color:#f2f1aa" class="wid_100 left special_text"><%# Eval("CompanyName") %></div> 
         <%} 
         else 
         { 
           %> 
         <div class="wid_100 left special_text"><%# Eval("CompanyName") %></div><% } %> 
         <%Count++; %> 
संबंधित मुद्दे