2011-05-09 51 views
2

我是一個初學者,使用ASP.Net(C#)的MVC3,但我沒有得到下一個情況來刪除記錄。MVC刪除記錄,但如何在控制器中編碼

我有一個視圖,要求用戶確認刪除一個項目(記錄)。由於代碼我有這個初始化視圖:

public ActionResult KeywordsDelete(Guid id) 
{ 
    _db = new BlaContext(); 
    return _db.SearchTerms.Where(x => x.id.Equals(id)).First(); 
} 

但是,當確認,然後我有下一個代碼。

[HttpPost] 
public ActionResult KeywordsDelete(Guid id) 
{ 
    _db = new BlaContext(); 
    var term = _db.SearchTerms.Where(x => x.id == id).First(); 
    _db.SearchTerms.Remove(term); 
    _db.SaveChanges(); 
    return View("Keywords", _db.SearchTerms.ToList()); 
} 

建築是不可能的,因爲此方法的簽名已存在(相同的參數和方法名稱)。

所以我不知道如何在這種情況下刪除記錄。該視圖是使用默認的Scaffold模板創建的(刪除)。

+0

_db = new BlaContext(); - 這行在兩個控制器中,有錯誤 – 2011-05-09 09:48:39

+0

@ evgeniy.labusnkiy:爲什麼?他們將被單獨請求調用,所以不會有問題。 – DanielB 2011-05-09 09:52:19

+0

@ evgeniy.labusnkiy你是什麼意思?在第二個Action(使用HttpPost)中,_db爲null。 – robertpnl 2011-05-09 09:55:31

回答

2

你可以給你的職位功能的其他附加參數

[HttpPost] 
public ActionResult KeywordsDelete(Guid id, FormCollection collection) 
{ 
    _db = new BlaContext(); 
    var term = _db.SearchTerms.Where(x => x.id == id).First(); 
    _db.SearchTerms.Remove(term); 
    _db.SaveChanges(); 
    return View("Keywords", _db.SearchTerms.ToList()); 
} 

但是你取得動作也應該返回一個搜索不是一個數據對象,我想。

public ActionResult KeywordsDelete(Guid id) 
{ 
    _db = new BlaContext(); 
    return View(_db.SearchTerms.Where(x => x.id.Equals(id)).First()); 
} 
+0

謝謝。所以我知道FormCollection最重要的是在這些情況下添加到方法的參數列表中作爲插入,編輯和刪除? – robertpnl 2011-05-09 09:58:44

+0

在這個特殊情況下,是的。通常你會使用ModelBinding來創建和編輯POST Action,比如'public ActionResult Edit(ModelType model)',你的GET Action將會是'public ActionResult Edit(int id)'左右。 – DanielB 2011-05-09 10:02:30

+0

感謝您的回覆和時間。 – robertpnl 2011-05-09 10:09:54

5

我在閱讀MVC時發現了針對此問題的替代解決方案。退房:Improving the Details and Delete Methods

[HttpPost, ActionName("Delete")] 
public ActionResult DeleteConfirmed(int id = 0) 
{ 
    // Delete stuff... 
} 

這將路由操作刪除的方法DeleteConfirmed。

+0

不錯!比添加不必要的參數要優雅得多。 – 2012-08-09 10:13:05