2017-02-24 3 views
-1

Ich versuche herauszufinden, wie Sie anwenden "Versandkosten sind $ 3,99 für den ersten Artikel und $ .99 für jeden zusätzlichen Artikel" in meiner Warenkorb-Ansicht.Berechnung der gesamten Versand in ASP.NET MVC

Im Moment habe ich

@{ 
     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; 

Ich bin nicht sicher, wie dies zu nähern. Würde ich eine foreach-Schleife verwenden, um die Gesamtquantitäten zu zählen, und wenn die Quantität größer als diese ist, würde es 3,99 + 99 addieren?

+3

Besser diese Berechnung in einem Controller und ein entsprechendes ViewModel zurückgeben. Verwenden Sie keine View für Geschäftslogik – Steve

+0

Der Kalkül der Versandkosten kann in einer Cart-Klasse durchgeführt werden. Die Warenkorbklasse kann die Eigenschaft Artikel des Typs IEnumerable und eine Eigenschaft ShippingCost enthalten, in der die für die Versandberechnung definierte Logik implementiert ist. Dann definieren Sie in der CartViewModel-Klasse ein anderes IEnumerable, um die zu rendernden Elemente in der Ansicht mithilfe von @foreach und einer Eigenschaft ShippingCost vom Typ decimal zu speichern, in der die Kosten für den Versand gespeichert werden. Der Controller erstellt die Instanz der CartViewModel-Klasse und legt Items und ShippingCost fest. –

+0

Sind Gebühren auf unterschiedliche Artikel oder Gesamtmenge bezogen? Es ist nicht klar, da die angegebene Gebühr nach dem ersten "Element" unterschiedlich ist. aber ein Gegenstand hat eine Menge. – Nkosi

Antwort

0

Wie ich in einem Kommentar zu Ihrer Frage gesagt habe, hat die Geschäftslogik keinen Platz in einer Ansicht. Bessere Berechnungen in einem Controller und Rückgabe des Ergebnisses in einem bestimmten Modell für Ihre Ansicht, oder im Falle einfacher Werte können Sie den ViewBag verwenden, um diese Daten von Ihrem Controller in die Ansicht zu übertragen.

In Ihrem Fall ich die Calc in der Steuerung machen würde

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; 

Und die Ansicht, die einen einfachen Trick könnte die ViewBag Werte für die Anzeige verwenden ....

Beachten Sie auch, dass für die Berechnung der Geldwerte sollten Sie immer den Dezimal-Datentyp verwenden, um rounding errors implicit in the floating point datatype zu vermeiden.

+0

Die Berechnungen sind immer noch falsch. Es fügt nicht die zusätzlichen 0,99 für jeden Artikel hinzu –

+1

Lass mich verstehen. die Versandkosten sind 3,99 für den ersten Artikel, dann von der zweiten sind sie 0,99 oder? Ich empfehle Ihnen, den Debugger zu verwenden. Setzen Sie einen Haltepunkt (F9) auf die foreach-Linie und führen Sie die App bis zum Haltepunkt aus. An dieser Stelle fahren Sie Schritt für Schritt fort (F10) und prüfen Sie, was in der Schleife passiert. – Steve