让MVC2删除工作

时间:2010-07-28 00:49:49

标签: linq-to-sql

好的,我有一个mvc应用程序。我试图让我的删除工作。基本上我想要它所以当我点击删除时它会带我到一个页面说“你确定吗?”我有这个工作,问题是捕获请求并实际执行删除。我尝试了不同的方法。如下。

 public ActionResult Delete(int id)
    {
        var something = friendsDB.Friends.Single(a => a.Id == id);
        return View(something);
    }
    [HttpPost]
    public ActionResult Delete(int id, string confirmButton)
    {
        var something = friendsDB.Friends.Single(a => a.Id == id);

        // For simplicity, we're allowing deleting of albums
        // with existing orders We've set up OnDelete = Cascade
        // on the Album->OrderDetails and Album->Carts relationships

        friendsDB.DeleteObject(something);
        friendsDB.SaveChanges();

        return View("Index");
    }

那不起作用,deleteobject和savechanges声明

  

“C:\用户\ Mtszc \文件\视觉   工作室   2010 \项目\测试\测试\内容\ \控制器DownloadsController.cs(36,23):   错误CS1061:'Test.Models.FriendsDB'   不包含的定义   'DeleteObject',没有扩展方法   'DeleteObject'接受第一个   类型的论证   可以找到'Test.Models.FriendsDB'   (你错过了使用指令或   汇编参考?)“

我尝试的第二件事是

public ActionResult Delete(int id)
    {
        var something = friendsDB.Friends.Single(a => a.Id == id);
        return View(something);
    }
    [HttpDelete]
    public ActionResult Delete(Friend myFriend)
    {
        try
        {
            friendsDB.Friends.DeleteOnSubmit(myFriend);
            friendsDB.SubmitChanges();
            return RedirectToAction("Index");
        }
        catch
        {
            return View();
        }
    }

没有用。它编译但当我点击删除,它带我到我说我确定要删除的页面,它返回视图,这是捕获,这意味着尝试失败。

这是我制作的一个简单的sql数据库,Id,name,link。我正在使用linq到sql类。我可以创建和查看,但不能删除。

3 个答案:

答案 0 :(得分:1)

尝试这样的事情。

var rowToDelete = friendsDB.Friends.Single(a => a.ID == myFriend.ID);
friendsDB.Friends.DeleteOnSubmit(rowToDelete);
friendsDB.SubmitChanges();

这将是一种使用Linq处理记录删除的简单方法。如果语法不完美,我很抱歉,因为我正在快速写出来。

顺便说一下,微软公司为了学习ASP.NET MVC和LINQ而制作了一些很棒的视频。看看这些。

http://www.asp.net/mvc

干杯

答案 1 :(得分:0)

错误消息似乎让您感到困惑。

"C:\Users\Mtszc\Documents\Visual Studio 2010
\Projects\Test\Test\Content\Controllers\DownloadsController.cs(36,23): error 
CS1061: 'Test.Models.FriendsDB' does not contain a definition for 'DeleteObject'
and no extension method 'DeleteObject' accepting a first argument of
type 'Test.Models.FriendsDB' could be found (are you missing a using directive
or an assembly reference?)"

不是指MVC Action,它指的是你的Test.Models.FriendsDB方法调用:

friendsDB.DeleteObject(something);   

听起来你没有在friendsDB模型上定义方法“DeleteObject”,或者你没有一个接受'Test.Models.FriendsDB'对象类型的重载方法。

其次,不要将HTTP方法(Get,Post,Put,Delete)与您要完成的内容混淆。 “Put”和“Delete”是我不相信Web浏览器经常使用的方法。大多数请求都是GET,除非您提交表单,然后他们是POST。添加HttpDelete很可能会使Action无用。如果您只想从表单提交中删除操作,请添加HttpPost

答案 2 :(得分:0)

好的,谁见过这个我解决了这个问题。经过几个小时的挖掘,我解决了这个问题。对于任何使用linq to sql创建sql数据库并为其创建模型类的人来说,这是如何使删除工作。

public ActionResult Delete(int id)
    {
        var something = friendsDB.Friends.Single(a => a.Id == id);
        return View(something);
    }
    [HttpPost]
    public ActionResult Delete(int id, string confirmButton)
    {
        var sigh = friendsDB.Friends.Single(a => a.Id == id);
        try
        {
            friendsDB.Friends.DeleteOnSubmit(sigh);
            friendsDB.SubmitChanges();
            return RedirectToAction("Index");
        }
        catch
        {
            return View();
        }
    }

用这个,创建一个强类型的删除视图。