2017-01-17 1 views
-1

Ich habe eine Eigenschaft Last_edited in meinem Modell möchte dies auf Code-Seite festlegen. Ich habe auch Eigenschaften wie Name, die von Benutzer festgelegt werden sollte. Ich benutze Code First und diese Edit-Methode wurde von Entity Framework generiert. Ich habe nichts gefunden, wie es geht.MVC Set spezifische Eigenschaften Code Seite

Hier ist mein Controller-Edit-Methode:

public ActionResult Edit(int? id) 
{ 
    if (id == null) 
    { 
      return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
     } 
     Product product = db.Product.Find(id); 
     if (product == null) 
     { 
      return HttpNotFound(); 
     } 
     return View(product); 
} 
[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Edit([Bind(Include = "Id,Name,Comment,Last_edited")] Product product) 
{ 
    if (ModelState.IsValid) 
    { 
     db.Entry(product).State = EntityState.Modified; 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
    } 
     return View(product); 
} 
+0

oder lass es einfach so und setze Last_edited auch serverseitig. als ovverride – lordkain

+0

Wenn Sie nur Last_edited in der Codepage benötigen und es nicht in Ihrer Ansicht anzeigen möchten, entfernen Sie einfach ir aus Ihrer "include" -Anweisung. –

Antwort

2

entfernen Last_edited aus der Include-Liste der Bind Attribut und den Wert selbst in der Aktionsmethode.

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Edit([Bind(Include = "Id,Name,Comment")] Product product) 
{ 
    product.Last_Edited = DateTime.UtcNow; 
    if (ModelState.IsValid) 
    {   
     db.Entry(product).State = EntityState.Modified; 
     db.SaveChanges(); 

     return RedirectToAction("Index"); 
    } 
    return View(product); 
} 

Angenommen Last_edited ist von DateTime Typ. Wenn es sich um einen anderen Typ handelt, legen Sie den entsprechenden Wert fest.

Da wir den Wert dieser Eigenschaft in der Aktionsmethode festlegen, müssen Sie kein Eingabefeld für diese Eigenschaft im Formular beibehalten.

Als eine Randnotiz, The best way to prevent overposting is by using a (view specific) view model class. Dadurch können Sie auch lose gekoppelte Programme erstellen.

+0

ist es besser, ViewModel mit nur Eigenschaften zu verwenden, die über View übergeben werden müssen? –

+0

Ja. Der beste und lose gekoppelte Weg zu [Überlagerung verhindern ist die Verwendung eines Ansichtsmodells] (http://stackoverflow.com/questions/34260334/mvc-6-bind-attribute-disappears/34260397#34260397). Das OP ist neu in MVC und spielt mit dem von der IDE generierten Code. Ich wollte ihn nicht verwirren. Ich werde die Antwort aktualisieren, um den Link – Shyju

+0

yeah, das wäre gut hinzuzufügen, dass dieser Ansatz für zukünftige Leser besser ist. –

Verwandte Themen