2012-03-14 11 views
17

Próbuję warunkowo dodać CSS background-color do zestawu wierszy tabeli, na podstawie tego, jak blisko jest data wygaśnięcia elementu. Trzydzieści dni lub mniej powinno być czerwone, 90 - 31 dni bursztynowe, a reszta zielona. (Wkładam czerwony na początku, gdy to działa, wrócę i wykonam bursztynowe/zielone rzędy).Formatowanie warunkowe w widoku indeksu maszynki do golenia

@foreach (var item in Model) 
{ 
    int daysLeft = (item.ExpiryDate - DateTime.Today).Days; 

    if (daysLeft <= 30) 
    { 
     <tr style="background-color:Red"> 
    } 
    else 
    { 
     <tr> 
    } 

     <td> 
      @Html.DisplayFor(modelItem => item.SupplierName) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.ExpiryDate) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.InceptionDate) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Value) 
     </td> 
     <td> 
      @Html.ActionLink("Edit", "Edit", new { id = item.Id }) | 
      @Html.ActionLink("Details", "Details", new { id = item.Id }) | 
      @Html.ActionLink("Delete", "Delete", new { id = item.Id }) 
     </td> 
    </tr> 
} 

Kiedy uruchomić tej strony, dostaję YSOD mówiąc blok @foreach brakuje jej zamknięcie }, ale o ile widzę, że są dopasowane więc jestem zakładając rzeczywistą problemem jest coś innego .

Odpowiedz

35

Brzytwa wymaga, aby znaczniki znajdujące się bezpośrednio w blokach kodu były zrównoważone i dobrze uformowane.
Dlatego cały kod po pierwszym otworzeniu znacznika <tr> jest w rzeczywistości analizowany jako znacznik, więc ostateczny } zamyka właśnie if.

Aby to naprawić, możesz zmusić maszynę Razor do zignorowania tagu, dodając prefiks do linii @:.

Alternatywnie, można pozbyć się całkowicie if i napisać

string style = daysLeft <= 30 ? "background-color:Red" : null; 
<tr style="@style"> 
    ... 
</tr> 
Powiązane problemy