2012-03-14 10 views
17

CSS background-colorを項目の有効期限の近さに基づいて一連の表の行に条件付きで追加しようとしています。 30日以下は赤、90〜31日は琥珀、残りは緑色でなければなりません。 (私は最初に赤を入れています。これがうまくいけば、私は元に戻って、琥珀色の行をします)。Razor Index Viewの条件付き書式設定

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

私はこのページを実行すると、私は@foreachブロックはその終了}が欠落していると言ってYSODを得るが、私の知る限り、彼らがそのように一致している見ることができるように私は実際問題は何か他のものであると仮定しています。

答えて

35

Razorでは、コードブロック内のタグがバランスよく整形されている必要があります。
したがって、最初の開封<tr>タグの後のコードはすべて実際にはマークアップとして解析されるため、}ifを閉じます。

これを修正するには、Razorにタグを無視させ、行の先頭に@:という接頭辞を付けることができます。

また、あなたは完全にifを取り除くと

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