2017-07-18 37 views
0

IM很新的MVC和我發現很難找到的東西資源,這樣最佳的方法來計算entrys的數據在MVC

我有一個模型:

public class Distance 
{ 
    public int Id { get; set; } 
    [DisplayName("Distance Run")] 
    public float DistanceRun { get; set; } 

    [DisplayName("Chose a date")] 
    [DataType(DataType.Date)] 
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] 
    public DateTime _Date { get; set; } 

    [DisplayName("Any Addtional Comments")] 
    public String AdditionalComments { get; set; } 
} 

我想展示在我看來這個模型的所有總距離運行,在頂角。會是最好使用全:

@foreach (var item in Model) { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.DistanceRun)Km 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item._Date) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.AdditionalComments) 
     </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循環通過將每個DISTANCE公里來計算的話,或者它將使意義創造一種近乎於相同的觀點,在一個控制器來計算距離自己單獨行動?

+0

所以視圖的模型實際上是該模型對象的集合?那麼「總距離」是不是「Model.Sum(d => d.DistanceRun)」? – David

+0

@大衛哦,對不起,我甚至不知道你可以做到這一點。如果你寫這個答案,我會很高興接受它 – user3042332

回答

2

從視圖中的代碼看來,視圖模型實際上是該特定模型的集合。喜歡的東西:

@model IEnumerable<Distance> 

(或任何類似,它使這種差別不大)

如果是這樣的話,那麼你的看法已經有了它需要的數據,你只需要綁定到它。計算的值不需要任何雙向綁定,因此您可以將其輸出到任何你喜歡的頁面。事情如此簡單:

Total Distance: @Model.Sum(d => d.DistanceRun) 

可以列舉與自定義格式追加.ToString()你喜歡的任何格式,也許。但在這種情況下綁定到模型就像輸出這樣的值一樣簡單。

+0

我不知道該視圖可以在 – Rise

+2

之前與模型進行通信@Rise:視圖可以讀取提供給它的模型上的任何信息。這是MVC模式本質的一部分。 – David

1

正如評論中指出的那樣,您實際上已經收集了Distance作爲視圖的模型。我建議你爲這個視圖中創建一個新的視圖模型,如:

public class DistancesViewModel 
{ 
    public ICollection<Distance> Distances { get; set; } 

    public int TotalDistanceRun { 
     get { 
      return Distances.Sum(d => d.DistanceRun) 
     } 
    } 
} 

然後您查看綁定到該視圖模型來代替。然後您可以訪問@Model.TotalDistanceRun並通過Model.Distances繼續使用循環中的距離等。

對於我來說,這種方法的好處是避免視圖上的代碼,因爲您可能需要更改在某個點計算總距離的方式,並且在ViewModel上執行更清晰。

相關問題