2017-01-21 8 views
0

モデルProductsaddedadded_fromlast_editedlast_edited_fromがあります。誰かが新しいProductを作成すると、4つの列挙されたエンティティが対応するデータで埋められます。これですべてが問題ありません。もし誰かが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時間程度試みたが、私にはあなたのポストの外観は、HTMLのように何

答えて

0

を助けたものを何も見つかりませんでしたか?あなたの値が投稿に戻されていないので、値を上書きしていると思います。

次の2つの方法でこれを解決することができます:あなたはPOST、その情報が含まれている場合ように

  1. 変更HTML /レイザーは、「追加」の情報を含めること。 (これがすでに起こっているかどうかはわかりません)。

  2. まず、IDを使って検索して製品を見つけてから、通常通りにプロパティを変更します。これは、データベースオブジェクトをビューに渡すことを本当に望んでいないため(そして、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 –

関連する問題