2016-08-08 66 views
0

Mein Controller-Funktion und Variable "Geld"Interaktion von Daten zwischen View und Controller

static int? money = 500; 

public ActionResult SubmitPurchase(int? orderPrice) 
    { 
     money = money - orderPrice; 

     ViewBag.Money = money; 

     if (db.Purchases.Any()) 
     { 
      db.Database.ExecuteSqlCommand("delete from PurchaseLists"); 
      return View(); 
     } 
     else return RedirectToAction("Order"); 
    } 

My View

<div align="center"> 
 
    <p><h1>Thank you!</h1></p> 
 
    <p><h2>Your balance is @ViewBag.Money</h2></p> 
 
    <p><h2>Come again plz! :)</h2></p> 
 
</div> 
 
<a href="/Home/Order"> 
 
    <input type="button" value="main menu"/> 
 
</a>

Eine andere Ansicht von URL-Wert orderPrice in Funktion sendet SubmitPurchase . Mein Problem ist, dass @ViewBag.Money in meiner Ansicht nicht angezeigt wird, aber sollte den Wert der Variablen money nach Berechnung in Funktion SubmitPurchase zeigen. Was ich falsch mache?

+0

Check 'orderPrice' ... wenn es null ist, wird Geld null – mxmissile

+0

@mxmissile Nein sein, es ist nicht null, denn wenn ich meine Ansicht nenne ich URL haben wie das -' http: // localhost: 61314/Home/SubmitPurchase/49' –

+1

Haben Sie das im Debugger bestätigt? – mxmissile

Antwort

2

Wenn Sie keinen gültigen Integer-Wert auf den orderPrice Parameter übergeben, der Code wird versuchen 500-null auszuführen, die in null führt und Null-Wert wird in money Variable gespeichert und auf ViewBag eingestellt werden.

Sie können einen Null-Check durchführen, bevor Sie die Berechnungen durchführen, um dies zu verhindern.

if(orderPrice!=null) 
    money = money - orderPrice; 

Die URL, die Sie zugreifen möchten, ist http://localhost:61314/Home/SubmitPurchase/49. Mit der Standard-MVC-Routenregistrierung wird es nicht dem orderPrice Parameter Ihrer Methode zugeordnet. Sie können entweder den Code aktualisieren, um die URL zu müssen wie

http://localhost:61314/Home/SubmitPurchase?orderPrice=49

Oder Update Ihre Aktion-Methode Parametername sein id

public ActionResult SubmitPurchase(int? id) 
{ 
    if(id!=null) 
     money = money - id; 
    // do something 
    return View(); 
} 

Angenommen, Ihre SubmitPurchaseview erzeugt werden (SubmitPurchase.cshtml) enthält den Code zum Lesen und Anzeigen des ViewBag-Elements.

+0

Nein, mein Code reutrns Ansicht. So funktioniert diese Seite, aber ich habe eine Zeichenfolge - | ** Dein Guthaben ist ** |, sollte aber zB wie - | sein ** Ihr Guthaben beträgt 445 ** | –

+0

Whic View-Datei hat Ihren Code, der den ViewBag-Artikel anzeigt? – Shyju

+0

die Ansicht, die den gleichen Namen mit der Funktion in Controller haben –

1

Versuchen Sie dies zum Beispiel:

if(orderPrice.HasValue) 
{ 
    money = money - orderPrice; 
} 
ViewBag.Money = money; 

Oder Ihre Aktion Argument ändern, um nicht-nullable.

public ActionResult SubmitPurchase(int orderPrice) 
+0

Ich werde versuchen und danach antworten –