2017-01-21 5 views
0

У меня есть предприятие, added_from, last_edited, last_edited_from в модели Products. Если кто-то создает новый Product, четыре перечисляемых объекта должны быть заполнены соответствующими данными; С этим все в порядке. Если кто-то редактирует Product, должны быть заполнены только объекты last_edited, но мой метод в контроллере каждый раз перезаписывает объекты added и освобождает их.Контроллер 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(); 
      } 
      ViewBag.Category_id = new SelectList(db.Category, "Id", "Name", product.Category_id); 
      return View(product); 
     } 

     [HttpPost] 
     [ValidateAntiForgeryToken] 
     public ActionResult Edit([Bind(Include = "Id,Barcode,Name,Category_id,Comment")] Product product) 
     { 
      if (ModelState.IsValid) 
      { 
       product.last_edited = DateTime.Now; 
       product.last_edited_from = User.Identity.GetUserId(); 
       db.Entry(product).State = EntityState.Modified; 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 
      ViewBag.Category_id = new SelectList(db.Category, "Id", "Name", product.Category_id); 
      return View(product); 
     } 

Модель:

public int Id { get; set; } 

    public double Barcode { get; set; } 

    [MinLength(3)] 
    public string Name{ get; set; } 

    [ForeignKey("Category_id")] 
    public Category CategoryFK { get; set; } 

    [Required] 
    public int Category_id { get; set; } 

    public DateTime? added { get; set; } 

    [ForeignKey("added_from")] 
    public ApplicationUser added_from_User { get; set; } 

    public string added_from { get; set; }  

    public DateTime last_edited { get; set; } 

    [ForeignKey("last_edited_from")] 
    public ApplicationUser last_edited_from { get; set; } 

    public string last_edited_from { get; set; } 

Я попытался около ~ 5 часов, но не нашел ничего, что помогло мне

ответ

0

Что делает ваш пост выглядеть в HTML? Держу пари, что это переопределяет значения, потому что ваши значения не возвращаются к сообщению.

Вы можете решить эту проблему двумя способами:

  1. Изменение HTML/Бритва включить «Добавленная» информацию, так что, когда вы POST, включена эта информация. (Не уверен, что это уже происходит).

  2. Сделайте поиск и найдите продукт, используя его идентификатор, а затем измените свойства как обычно. Это лучший вариант, потому что вы действительно не хотите передавать свои объекты базы данных до ваших просмотров (а затем вернуться к POST). Точный синтаксис для этого может быть отключен для поиска продукта, но он должен быть достаточно близко, чтобы вы могли получить общее представление о том, что он делает.

    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Edit([Bind(Include = "Id,Barcode,Name,Category_id,Comment")] Product product) 
    { 
        if (ModelState.IsValid) 
        { 
         var productInDb = db.Products.First(x => x.Id == product.Id); 
         productInDb.last_edited = DateTime.Now; 
         productInDb.last_edited_from = User.Identity.GetUserId(); 
         db.Entry(productInDb).State = EntityState.Modified; 
         db.SaveChanges(); 
         return RedirectToAction("Index"); 
        } 
        ViewBag.Category_id = new SelectList(db.Category, "Id", "Name", product.Category_id); 
        return View(product); 
    } 
    
+0

Второй был хороший выбор для меня, я уже подозревал что-то подобное, но я действительно не понимаю ...: S –

Смежные вопросы