在控制器中调用私有方法返回null值

时间:2013-02-25 12:45:15

标签: asp.net asp.net-mvc-3

我正在尝试删除帖子,但每当我删除帖子时,其标签都不会被删除。我正在使用断点来查看事情是如何发生的,我注意到GetPost在调用时不包含标记。在下面的代码中,您可以看到我正在尝试在delete方法中插入/调用tagg,但似乎无法调用它。

我在控制器中删除

   public ActionResult Delete(int id)
        {
            if (IsUser)
            {
                Post post = GetPost(id);
                var tagss = db.Tags.Where(tg => tg.ID == id); // this should call GetTag but i dunno how :(
                foreach (var t in tagss)
                {
                    db.Tags.DeleteObject(t);
                }

                db.DeleteObject(post);
                db.SaveChanges();                   
            }
            return Redirect(Request.UrlReferrer.ToString());
        }

的getPost

 private Post GetPost(int? id)
        {
            return id.HasValue ? db.Posts.Where(x => x.ID == id).First() : new Post() { ID = -1 };           
        }

GetTag

private Tag GetTag(string tagName)
        {
            return db.Tags.Where(x => x.Name == tagName).FirstOrDefault() ?? new Tag() { Name = tagName };
        }

问题:
我试图在删除功能中包含标签,这样每当我删除我的帖子它也将被删除但我不知道如何调用它。请帮助我们谢谢对不起我不善于查询。 :(

更新

public ActionResult Delete(int id)
        {
            if (IsUser)
            {
                Post post = GetPost(id);
                var tagss = var taggs = post.Tags;
                foreach (var t in tagss)
                {
                    db.Tags.DeleteObject(t);
                }

                db.DeleteObject(post);
                db.SaveChanges();                   
            }
            return Redirect(Request.UrlReferrer.ToString());
        }

我现在能够调用标记列表,但仍无法使用我的帖子删除它。这给了我一个错误收集被修改;枚举操作可能无法执行。

2 个答案:

答案 0 :(得分:1)

好的我现在能够删除我刚刚添加的标签.ToList并且错误消失了。这是我的工作。

 public ActionResult Delete(int id)
        {
            if (IsUser)
            {
                Post post = GetPost(id);
                var taggs = post.Tags;
                foreach (var t in tagss.ToList())
                {
                    db.Tags.DeleteObject(t);
                }

                db.DeleteObject(post);
                db.SaveChanges();                   
            }
            return Redirect(Request.UrlReferrer.ToString());
        }

答案 1 :(得分:0)

如果我正确理解你的问题,你可以修改你的Post类,以包含一个名为“Tags”的属性,它是你的Tag类的集合,并包含该帖子的所有标签名称,那么你可以这样做获取该帖子的标签,然后删除它们。

Post post = GetPost(id);
var tagss = post.Tags;