2016-12-04 79 views
1

在MVC視圖中的foreach中,是否可以計算Amount值的運行總數?如何計算運行總量?

@foreach (var item in Model) 
{ 
    <tr> 
     <td>@Html.DisplayFor(modelItem => item.ID)</td>   
     <td>@Html.DisplayFor(modelItem => item.Amount)</td> 
     <td> // here Item.Amount, should sum based on previous</td> 
    </tr> 
} 

是否有可能在這裏或我需要在控制器中的任何方法?

回答

2

你能 - 是

@{ decimal runningTotal = 0M; } // assumes Total is typeof decimal 
@foreach (var item in Model) 
{ 
    runningTotal += item.Amount 
    <tr> 
     <td>@Html.DisplayFor(modelItem => item.ID)</td>   
     <td>@Html.DisplayFor(modelItem => item.Amount)</td> 
     <td>@runningTotal</td> 
    </tr> 
} 

你是否應該 - 不

創建一個視圖模型來表示你想要什麼以在視圖中顯示(即,除屬性IDAmount之外還包括public decimal RunningTotal { get; set; }屬性,並且在控制器中進行計算Ë它屬於,所以,在考慮到其簡單地

<td>@Html.DisplayFor(modelItem => item.RunningTotal)</td> 

注意這也爲您提供了應用[DisplayFormat]屬性的格式在視圖中值的靈活性。

1

你的情況最好使用 「for」 循環

@for (int i = 0;i<Model.Count();i++) 
{ 
    var modelItem = Model[i]; 
    var calculatedField = modelItem.Amount; 
    if (i>0) 
    { 
     calculatedField = Model[i-1].Amount; 
    } 
    <tr> 
     <td>@Html.DisplayFor(modelItem => item.ID)</td>   
     <td>@Html.DisplayFor(modelItem => item.Amount)</td> 
     <td> @calculatedField </td> 
    </tr> 
} 
+0

項目的runningTotal沒有包含**和**當前項目之前的所有項目嗎? –