2016-06-10 13 views
-1

Ich habe ein Problem, dass es scheint, mein Modell nicht nach Datenbankänderung aktualisiert. Ich habe eine Liste, die jeweils einen Knopf zum Bestätigen oder Ablehnen hat.Modell nicht nach Datenbankänderung aktualisiert

using (Html.BeginForm("LeaveProcess", "Admin", FormMethod.Post, new { @class = "form-horizontal" })) 
{ 
    <input type="text" name="LvAppId" hidden value="@item.LvAppId"> 
    <li><button type="submit" class="btn btn-link" name="AppVal" value=true data-confirm="are u sure?" >Approve</button></li> 
    <li><button type="submit" class="btn btn-link" name="AppVal" value=false >Reject</button></li> 
} 

Wenn i-Taste drücken genehmigen oder abzulehnen, wird der Wert dieser Submit-Button wird gehen

[HttpPost] 
public ActionResult LeaveProcess(string LvAppId, bool AppVal) 
{ 
    DataChange.UpdateStatusFromAdmin(LvAppId, AppVal); 
    TempData["AlertMessage"] = "Your Action Has Been Processed"; 
    return RedirectToAction("Index"); 
} 

und Spalte Update-Datenbank an der Steuerung auf "genehmigt" oder "ablehnen".

public static void UpdateStatusFromAdmin(string LvAppId, bool AppVal) 
{ 
    if (AppVal == true) 
    { 
     db.Database.ExecuteSqlCommand("UPDATE LeaveApps SET Status='Approved' WHERE LvAppId={0}", LvAppId); 
    } 
    else 
    { 
     db.Database.ExecuteSqlCommand("UPDATE LeaveApps SET Status='Rejected' WHERE LvAppId={0}", LvAppId); 
    } 
} 

Die Datenbank aktualisiert wird (markiert mit SSMS), aber wenn ich die Seite neu zu laden, muss der Wert noch nicht aktualisiert und ich das Debuggen in Visual Studio neu starten, um es aktualisiert zu machen, was soll ich tun? Danke

+0

Wie verwalten Sie die Lebensdauer Ihrer Datenbank Kontext? machst du etwas wie: using (var db = new DatabaseContext()) {// Datenzugriff hier durchführen} siehe: https://msdn.microsoft.com/en-gb/data/jj729737.aspx –

+0

Hmm ich benutze es so: private static UserContext db = neuer UserContext(); und dann wie folgt aufrufen: var Employee = db.Employee.SqlQuery (strquery, Convert.ToInt32 (EmpId)). FirstOrDefault(); ist das falsch? und wie hängt es mit meinem Fall zusammen? – Fimblutterr

+1

Wenn Sie sicher sind, dass die Abfrage korrekt ist und Sie sehen, dass Änderungen am Backend mit Hilfe von ssms vorgenommen werden, aber die Änderungen nicht in Ihrer App widergespiegelt werden .. Ich denke, das ist ein guter Hinweis darauf, dass ein Problem mit der Kontext. Es sieht so aus, als würden Sie den Kontext nicht ordnungsgemäß entsorgen, indem Sie Ihren Datenzugriff in eine using-Anweisung wie im vorherigen Kommentar einfügen, und der Link würde automatisch darüber verfügen. Wenn das Ihr Problem nicht löst, würde ich mich darauf konzentrieren auf Ihrer Abfrage –

Antwort

1

Wenn Sie sicher sind, dass die Abfrage korrekt ist und Sie können Änderungen sehen an das Backend gemacht wird mit SSMS aber Die Änderungen spiegeln sich nicht in Ihrer App wider. Ich denke, das ist ein guter Hinweis darauf, dass ein Problem mit dem Kontext besteht.

Aus Ihrem Code sieht es so aus, als würden Sie den Kontext nicht richtig entsorgen.

Wrapping Ihren Datenzugriff innerhalb einer using-Anweisung wie folgt:

using(var db = new DatabaseContext()) 
{ 
    // perform data access here 
} 

automatisch entsorgen Will ...

https://msdn.microsoft.com/en-gb/data/jj729737.aspx

sehen, ob das Problem nicht lösen, ich d dann konzentrieren Sie sich auf Ihre Abfrage

0

Neben dem Schreiben Ihrer Werte in die Datenbank, tun Sie nichts mit ihnen.

Erstellen Sie ein Objekt Ihres Modells und rufen Sie Ihre Ansicht auf.

var model = new YourModel 
{ 
    LvAppId = lvAppId, 
    AppVal = appVal 
}; 

return View("Index", model); 

Andernfalls müssen Sie in die Datenbank ein Anruf Ihre neuesten Werte erhalten

Verwandte Themen