2017-01-17 4 views
-1

У меня есть свойство Last_edited в моей модели хочу установить это на стороне кода. У меня также есть свойства, такие как Name, которые должны быть установлены пользователем. Я использую Code First, и этот метод Edit был создан Entity Framework. Я ничего не нашел, как это сделать.MVC задает специфические свойства кодовую сторону

Вот мой контроллер Изменить метод:

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

или просто оставить его таким и установить Last_edited также serveride. как ovverride – lordkain

+0

Если вам нужна только Last_edited в кодовой части, и вы не хотите отображать ее в своем представлении, просто удалите ir из инструкции include. –

ответ

2

Удалить Last_edited из списка Include из Bind атрибута и установите значение самостоятельно в способе действия.

[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); 
} 

Предполагая Last_edited имеет DateTime типа. если это другой тип, установите соответствующее значение.

Поскольку мы устанавливаем значение этого свойства в методе действий, нет необходимости хранить поле ввода для этого свойства в форме.

В качестве примечания стороны, The best way to prevent overposting is by using a (view specific) view model class. Это также позволяет создавать свободно связанные программы.

+0

is'nt лучше было бы использовать viewmodel только с пропозициями, которые необходимо передать через представление? –

+0

Да. Лучший и слабо связанный способ [предотвратить переупорку - использовать модель представления] (http://stackoverflow.com/questions/34260334/mvc-6-bind-attribute-disappears/34260397#34260397). OP является новым для MVC и играет с кодом, сгенерированным IDE. Я не хотел его путать. Я обновлю ответ, чтобы включить ссылку – Shyju

+0

да, это было бы неплохо добавить, что лучший подход для будущих читателей. –