2017-02-24 77 views
-1

我想弄清楚如何在我的購物車視圖中申請「運費是第一件商品3.99美元,每件附加商品是0.99美元」。計算ASP.NET MVC中的總髮貨

現在我有

@{ 
     double itemTotal = 0; 
     double subTotal = 0; 
     int totalQty = 0; 
     double discount = 0.8; 
     double shippingBase = 3.99; 
     double shippingItem = 0.99; 
     double totalShipping = 0; 
} 

@foreach (var item in Model) 
    { 

      double price = (double)item.price/100 * discount; 
      itemTotal = @item.qty * price; 
      subTotal += itemTotal; 
      totalQty += @item.qty; 

我不知道如何處理這一點。我會用一個foreach循環來計算總數量,如果數量大於那個數字,它會加3.99 + 99?

+3

最好在控制器中做這個calc並返回一個合適的ViewModel。不要將視圖用​​於業務邏輯 – Steve

+0

運費成本的計算可以在購物車類中完成。 Cart類可以包含IEnumerable類型爲的屬性Items和ShippingCost屬性,其中實現了爲運輸計算定義的邏輯。然後,您可以在CartViewModel類中定義另一個IEnumerable,以使項目在視圖中呈現,使用@foreach和一個類型爲decimal的屬性ShippingCost來存儲運輸成本。控制器創建CartViewModel類的實例並設置Items和ShippingCost。 –

+0

收費是根據不同物品還是總量?目前尚不清楚,因爲在第一個「項目」之後所述費用不同。但一件物品有數量。 – Nkosi

回答

0

正如我在你的問題的評論中所說的,業務邏輯在視圖中沒有地方。最好在控制器中執行calc並將結果返回給您的視圖的特定模型,或者在簡單值的情況下,您可以使用ViewBag將此數據從控制器傳輸到視圖。

在你的情況我會用一個簡單的一招

decimal itemTotal = 0m; 
decimal subTotal = 0m; 
int totalQty = 0; 
decimal discount = 0.8m; 
decimal shippingItem = 3.99m; 
decimal totalShipping = 0m; 

foreach (var item in YourEnumerableItems) 
{ 
    decimal price = item.price/100 * discount; 
    itemTotal = item.qty * price; 
    subTotal += itemTotal; 
    totalQty += item.qty; 
    totalShipping += shippingItem; 

    // first shipping cost added, now set it to 0.99m for next items 
    shippingItem = 0.99m; 
} 
ViewBag.Total = subTotal; 
ViewBag.Quantity = totalQty; 
ViewBag.Shipping = totalShipping; 

和視圖可以使用ViewBag值的顯示使控制器中的鈣....

還要注意的是,計算貨幣值應始終使用小數數據類型以避免rounding errors implicit in the floating point datatype

+0

計算仍然不正確。它不是每個項目添加0.99的附加條款 –

+1

讓我明白。第一件商品的運費是3.99,那麼第二件商品的0.99是正確的?我建議你使用調試器。在foreach行上放置一個斷點(F9),然後運行該應用程序,直到出現斷點。此時繼續一步一步(F10)並檢查循環內部發生了什麼。 – Steve