2012-03-14 23 views
17

Tôi đang cố gắng thêm điều kiện CSS background-color vào một tập hợp các hàng trong bảng, dựa trên thời gian hết hạn của mục đó. Ba mươi ngày hoặc ít hơn nên đỏ, 90 - 31 ngày hổ phách và phần còn lại xanh lục. (Tôi đang đặt màu đỏ trong lần đầu tiên, một khi điều này là làm việc tôi sẽ quay trở lại và làm các hàng màu hổ phách/xanh lá cây).Định dạng có điều kiện trong Chỉ số dao cạo Xem

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

Khi tôi chạy trang này, tôi nhận được một YSOD nói khối @foreach là mất tích đóng nó }, nhưng như xa như tôi có thể nhìn thấy chúng được kết hợp vì vậy tôi giả định thực tế vấn đề là cái gì khác .

Trả lời

35

Dao cạo yêu cầu các thẻ trực tiếp bên trong các khối mã phải được cân bằng và được định dạng tốt.
Do đó, tất cả mã sau thẻ mở đầu tiên <tr> thực sự được phân tích cú pháp làm đánh dấu, sao cho số } cuối cùng chỉ đóng if.

Để khắc phục điều đó, bạn có thể buộc Dao cạo bỏ qua thẻ bằng cách đặt trước dòng với @:.

Ngoài ra, bạn có thể thoát khỏi những if hoàn toàn và viết

string style = daysLeft <= 30 ? "background-color:Red" : null; 
<tr style="@style"> 
    ... 
</tr> 
Các vấn đề liên quan