2013-09-05 45 views
5

ile HTML sayfasında çalışma koşulu, tabloyu verilerle doldurmak için aşağıdaki kodu kullanıyorum. if ifadesi beklediğim gibi çalışmıyor. Koşullu bloklardaki ifadelerin ikisi de yürütülür.C# kodu

  @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> 
} 

Burada neyim var? Böyle bir kullanım mümkün değil mi?

(cevabı gördükten sonra) DÜZENLEME :

düşündüğümden -

kez kod içinde

, "Eğer" ile gibi yapıları önüne gerekmez "@"

cevap

11

@ ...

ile başlatmanız gerekir.

ve ... başlangıcında Onsuz

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

, if( hala HTML olarak tedavi edilir.


@ sembolü sizin Jilet sözdizimi (yani C# kodu) başlangıcını tanımlar ve uygun bir sonlandırıcı ulaşılana kadar bir jilet kod bloğu olmaya devam edecektir. Örneğinizde en sık görüleni HTML'ye taşımanın birkaç yolu vardır, örneğin <td> gibi bir html etiketi eklemektir.

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

(Ben bu yorumları biliyorum Razor içinde alışkanlık iş bu yüzden onları katmayan)

: Burada

umarım bunu nasıl çalışması gerektiğini anlamanıza yardımcı olacaktır, senin kodun tam sürümüdür

Ve ilk başta düşündüğünüzü temizlemek için. İlk <tr> etiketine sahip olmasaydı, o zaman şu ... çalışacak

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

Bildirimi nasıl geri HTML moduna taşındı çünkü hiçbir zaman ifadesi hattı, bir @ sembolü gerekli değilse bütün.

+0

: gibi

kodunuzun Tam bir örnek olmazdı. Yani iç olanlar gerekli mi? –

+2

@Rohit: Evet, çünkü html etiketleri HTML'ye dönüşecek. Daha iyi bir açıklama için benim düzenime bakın – musefan

1

Kodunuzdaki sorun, HTML'nin ne olduğunu ve Razor'un ne olduğunu karıştırmanızdır. @ işaretinin, Jilet kodunuzun başladığı yerde olması ve daha sonra Jilet kodunun içinde kullanmanız gerekmediği varsayılmaktadır.

if(@userMessage.Message.MessageText.Length <= 10) yazdığınızda, if, Jilet kodu olarak değil, HTML'nin bir parçası olarak görülür. Yani HTML'yi terk ettiğinizde ve Razor moduna girdiğinizde, bir @ işaretine sahip olmanız gerekir. if ifadesinin bunun yerine @if(userMessage.Message.MessageText.Length <= 10) gibi görünmesi gerekir. Zaten deyimi ise bir dış sahip

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