2011-04-20 5 views
12

Dinamik olarak 2 sütun genişliğinde bir tablo oluşturmak için bir döngü ve sonra listede hiçbir girdi kalmayıncaya kadar satır sayısını artırmak istiyorum. Kolay gibi görünüyor, ve ben bu geldi:Razor'un foreach'ını ve ifadeleri kullanarak koşullu olarak yeni bir tablo satırı oluşturulamıyor gibi görünüyor mu?

<table> 
        <tr> 
         @{ var i = 0; } 
         @foreach (var tm in Model.TeamMembers) 
         { 
          <td>@tm.FirstName @tm.LastName @tm.Role</td> 

          if(++i % 2 == 0) 
          { 
           </tr> 
           <tr> 
          } 
         } 
        </tr> 
       </table> 

Ama hem döngü için ve deyimi ise beklenen} belirten hataları olsun. Etiketleri başka bir şeye değiştirirsem (örneğin), iyi çalışıyor.

Tahminimce satırın sonunu doğrulamaya çalışıyor, görüyor ve döngünün bitmesi gerektiğine karar veriyor? Bunu YAPMAMANIZI NASIL YAPABİLİRSİNİZ, yoksa tüm masayı döngü içinde bir sürü karışık şartlı şartla yerleştirmem gerekiyor mu?

@{ var i = 0; } 
@foreach (var tm in Model.TeamMembers) 
{ 
    <td>@tm.FirstName @tm.LastName @tm.Role</td> 
    if(++i % 2 == 0) 
    { 
     <text></tr><tr></text> 
    } 
} 

ya: :(

cevap

28

böyle deneyin

@{ var i = 0; } 
@foreach (var tm in Model.TeamMembers) 
{ 
    <td>@tm.FirstName @tm.LastName @tm.Role</td> 
    if(++i % 2 == 0) 
    { 
     @:</tr><tr> 
    } 
} 
+0

İkinci yöntemle uğraştı ve bir çekicilik gibi çalışır. Teşekkürler! – CodeRedick

+0

ikinci yöntem de benim için çalıştı! Referans için –

1

Jilet html etiketlerinin bir çift içine alınması için C# kodu aşağıdaki HTML kodu bekler Burada var. İlk olarak bitiş etiketi ve başlangıç ​​etiketi daha sonra jilet metnin ayrıştırılmasında sorun yaşardı.

html kod bloğunuzu kapatma sorunu, Darin tarafından belirtildiği gibi bu sorunu çözer.

Sen @ kullanabilirsiniz Jilet sözdiziminde Phil Haacked http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx

+0

+1, teşekkürler! – CodeRedick

1

tarafından bu hızlı kılavuzu okuyabilir: literal metin eklemek için.

@:This allows literal text & arbitrary html 

Bunun, aşağıdaki çözümümde nasıl uygulandığını görebilirsiniz. Tablo, satır başına doğru sayıda tablo hücresiyle gerektiği gibi kapanır.

Seçilen bir değeri bağlama yeteneğine sahip bir tabular radyo düğmesi listesine ihtiyacım vardı.

@{ 
    int iSelectedId = (int)ViewData["SelectedMember"]; 
    long iCols = 3; 
    long iCount = Model.TeamMembers.Count(); 
    long iRemainder = iCount % iCols;      
    decimal iDiv = iCount/repeatCols;      
    var iRows = Math.Ceiling(iDiv); 
} 
<table> 
    <tr> 
    @for (int i = 0; i < iCount; i++) 
    { 
     var tm = Model.TeamMembers[i]; 
     <td><input type="radio" name="item" value="@(tm.Id)" @(tm.Id == iSelectedId) ? "checked=checked" : "") /> @(tm.FirstName) @(tm.LastName)) - @(tm.Role) </td> 

     if (i % iCols == iCols -1 && i < iCount - 1) 
     { 
     //The alternate syntax for adding arbitrary text/html @: 
     //was crucial in getting this to work correctly. 
     @:</tr><tr> 
     } 
    } 
    if (iRem > 0) 
    { 
     <td colspan="@(iCols - iRem)">&nbsp;</td> 
    } 
    </tr> 
</table> 
İlgili konular