MVC删除记录,但如何在Controller中编码

时间:2011-05-09 09:44:21

标签: asp.net-mvc-3

我是使用ASP.Net(C#)的MVC3的初学者,但我没有得到删除记录的下一个情况。

我有一个View,要求用户确认删除项目(记录)。作为代码我有这个来初始化视图:

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模板(删除)创建视图。

2 个答案:

答案 0 :(得分:5)

我在阅读MVC时找到了解决这个问题的替代方案。查看:Improving the Details and Delete Methods

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

这会将操作Delete路由到方法DeleteConfirmed。

答案 1 :(得分: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());
 }

但是我认为你的GET Action也应该返回一个View而不是一个数据对象。

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