2016-03-22 10 views
2

Ich habe Probleme, herauszufinden, wie nur eine einzelne Zeile in einem Controller in ASP.NET zu aktualisieren. Ich versuche, eine Postanforderung an die Web-API zu senden, die ich erstellte, und die Anforderung wird ausgeführt, aber anstatt nur eine Zeile zu aktualisieren, werden alle Zeilen (alle Zeilen im Spaltenziel) in der Tabelle aktualisiert, die ich in meinem SQL zu bearbeiten versuche Datenbank. Jede Hilfe bei diesem Problem wäre willkommen. Ich sende die Post-Anfrage mit dem $ http-Service in AngularJS.ASP.NET Web API-Controller-Update Row

ASP.NET C#

public class patient_goalsController : ApiController 
    { 
     . 
     . 
     . 

     //POST: api/goals/update/1 
     [Route("Api/goals/update/{id}")] 
     public void UpdatePatientGoal(int id, patient_goals patient_goals) 
     { 
      var goals = (from p_goal in db.patient_goals 
         where patient_goals.id == id 
         select p_goal); 
      foreach(patient_goals row in goals) 
      { 
       row.goal = patient_goals.goal; 
      } 


     } 

     . 
     . 
     . 

    } 

AngularJS

$scope.updateGoal = function(goal){ 
goal.editing = false; 
console.log(goal.id); 
var data = {"id": goal.id, "goal": goal.goal} 
$http({ 
    method: "POST", 
    url: urlBase + "/goals/update/" + goal.id, 
    data: data, 
}).then(function error(response) { 
    $scope.error = response.statusText; 
    console.log(response.statusText); 
}); 

DB

id (int) 
goal (text) 

Antwort

4

finden Sie einfach die einzelnen verbundenen Unternehmen Sie möchten, die Änderungen vornehmen und speichern Sie Ihre Änderungen.

[Route("Api/goals/update/{id}")] 
public void UpdatePatientGoal(int id, patient_goals) 
{ 
     var goal = db.patient_goals.FirstOrDefault(x => x.id == id); 

     if(goal != null) 
     { 
      goal.goal = patient_goals.goal; 
      db.SaveChanges(); 
     } 
    } 
+0

Dank einer Million, löste dies mein Problem. Ich bin ziemlich neu in ASP.NET, daher kenne ich nicht die besten Methoden, um meine Abfragen zu erstellen. – user3704351

+0

@ user3704351 kein Problem, froh, dass es geholfen hat. –

0

Ich weiß nicht wirklich die Details Ihrer Datenbank-Schema, aber es sieht aus wie Ihre where -Klausel ist falsch. Anstatt zu patient_goals.id zu vergleichen, würden Sie p_goal werden Vergleich:

  var goals = (from p_goal in db.patient_goals 
         where p_goal.id == id 
         select p_goal); 

Andernfalls werden Sie einfach Werte aus Parameterliste zu vergleichen.

+0

Leider habe ich durch die Änderung meiner Abfrage mit dem obigen Vorschlag mein Problem nicht gelöst, die Postanforderung funktioniert jedoch noch, aber es ändert keine Zeilen in meiner Tabelle. – user3704351