2013-09-05 3 views
5

के साथ HTML पृष्ठ में काम नहीं कर रहा है, तो मैं डेटा के साथ तालिका को पॉप्युलेट करने के लिए निम्न कोड का उपयोग कर रहा हूं। if कथन काम नहीं कर रहा है जैसा कि मैंने उम्मीद की थी। सशर्त ब्लॉक में दोनों बयान निष्पादित किए जाते हैं।यदि सी # कोड

  @if (--somecondition--) 
  { 
     <table> 
     foreach (Message userMessage in UserMessages) 
     {        
       <tr> 
        if(@userMessage.Message.MessageText.Length <= 10) 
        { 
         <td> 
          @userMessage.Message.MessageText 
         </td> 
        } 
        if(@userMessage.Message.MessageText.Length > 10) 
        { 
         <td> 
          @userMessage.Message.MessageText.Substring(0, 10) 
         </td> 
        }  
       </tr>   
     } 
    </table> 
} 

मुझे यहां क्या याद आ रही है? क्या ऐसा उपयोग संभव नहीं है?

संपादित (उत्तर देखने के बाद):

मैंने सोचा -

एक बार कोड के अंदर, आप की तरह "अगर" के साथ निर्माणों उपसर्ग की जरूरत नहीं है "@"

उत्तर

11

आपको @ से शुरू करने की आवश्यकता है ...

@foreach (Message userMessage in UserMessages) 
{ 

और ...

@if(userMessage.Message.MessageText.Length <= 10) 
{ 
इसके बिना शुरू में

, if( अभी भी HTML के रूप में व्यवहार किया जाता है।


@ प्रतीक अपने उस्तरा वाक्य रचना (अर्थात सी # कोड) की शुरुआत को दिखाता है और जब तक एक उचित टर्मिनेटर तक पहुँच गया है एक रेजर कोड ब्लॉक होना जारी रहेगा। इसे वापस HTML पर ले जाने के कई तरीके हैं, जो आपके उदाहरण में सबसे ज्यादा देखा गया है, एक HTML टैग, जैसे कि <td> शामिल करना है।

यहाँ, अपने कोड की पूरी संस्करण है उम्मीद है कि यह समझना है कि यह कैसे काम करना चाहिए मदद मिलेगी:

<table> 
//due to the table tag, we are current inside HTML 
//so we need to use the @ symbol to move back to razor syntax 
@foreach (Message userMessage in UserMessages) 
{        
    <tr> 
    //using this tag again changes us back to HTML mode 
    //so again we must use the at symbol 
    @if(userMessage.Message.MessageText.Length <= 10) 
    { 
     //still Razor 
     <td> 
     //back in HTML mode 
      @userMessage.Message.MessageText 
     </td> 
    } 
    @if(userMessage.Message.MessageText.Length > 10) 
    { 
     <td> 
      @userMessage.Message.MessageText.Substring(0, 10) 
     </td> 
    }  
    </tr>   
} 
</table> 

(मैं इन टिप्पणियों को पता उस्तरा में अभ्यस्त काम इसलिए उन्हें न जोड़ें)


और आरंभ में आपने जो सोचा था उसे साफ़ करने के लिए। आप पहली बार <tr> टैग नहीं किया है, तो निम्नलिखित काम करेगा ...

@foreach (Message userMessage in UserMessages) 
{ 
    if(userMessage.Message.MessageText.Length <= 10) 
    { 

सूचना कैसे पूरे अगर बयान लाइन एक @ प्रतीक आवश्यक नहीं है, क्योंकि हम कभी वापस HTML मोड में चले गए।

+0

मैं पहले से ही एक बाहरी अगर बयान की है। क्या आंतरिक भी आवश्यक है? –

+2

@ रोहित: हाँ, क्योंकि एचटीएमएल टैग इसे वापस एचटीएमएल में बदल देगा। बेहतर व्याख्या के लिए मेरा संपादन देखें – musefan

1

आपके कोड के साथ समस्या यह है कि आप एचटीएमएल और क्या रेजर मिश्रण करते हैं। @ संकेत माना जाता है कि आपका रेजर कोड कहां शुरू होता है और फिर आपको इसे रेजर कोड के अंदर उपयोग करने की आवश्यकता नहीं है।

जब आप if(@userMessage.Message.MessageText.Length <= 10) लिखते हैं तो if को रेजर कोड के रूप में नहीं देखा जाता है लेकिन HTML का हिस्सा नहीं देखा जाता है। इसलिए हर बार जब आप एचटीएमएल छोड़ते हैं और रेजर मोड में जाते हैं तो आपको @ चिह्न होना चाहिए। if कथन को इसके बजाय @if(userMessage.Message.MessageText.Length <= 10) जैसा दिखना चाहिए।

अपने कोड की एक पूरी उदाहरण देखने के लिए की तरह होगा:

<table> 
@foreach (Message userMessage in UserMessages) 
{        
    <tr> 
    @if(userMessage.Message.MessageText.Length <= 10) 
    { 
     <td> 
     @userMessage.Message.MessageText 
     </td> 
    } 

    @if(userMessage.Message.MessageText.Length > 10) 
    { 
     <td> 
     @userMessage.Message.MessageText.Substring(0, 10) 
     </td> 
    }  
    </tr>   
</table>