2015-04-18 84 views
0

我在我的mvc页面上有几个问题。当用户登录时,他们应该看到他们创建的帖子,但是当用户看到所有用户的所有帖子时。 (Linq issue from my index page)linq在mvc中使用实体框架

另外BlogUser正在显示该表的全部内容。我只想显示电子邮件地址。我在我的索引中尝试了BlogUser.Email,但它抛出了一个错误。

,我想起来了,现在看起来是这样的结果:

[在这里输入的形象描述] [1]

查看:

​​

控制器:

public ActionResult Index() 
    { 
     Post post = new Post(); 
     post.BlogUserEmail = User.Identity.Name; 
     var posts = db.Posts.Include(p => p.BlogUser).Include(p => p.Category); 
     //var posts = db.Posts.Include(p => p.BlogUser.Email).Include(p => p.Category); 
     return View(posts.ToList()); 
    } 

![输入图片描述] [2]

回答

3
public ActionResult Index() 
{ 
    Post post = new Post(); 
    post.BlogUserEmail = User.Identity.Name; 
    var posts = db.Posts.Include(p => p.BlogUser).Include(p => p.Category); 
    return View(posts.ToList()); 
} 

你是不是有过滤。而且从不使用post变量。

它应该是

var posts = db.Posts 
      .Where(p => p.PostUserEmail == User.Identity.Name) 
      .Include(p => p.BlogUser).Include(p => p.Category); 
    return View(posts.ToList()); 

吧?

+0

这工作(虽然它是BlogUserEmail不PostUserEmail)。 –

1

你可以这样做。选择登录的用户从数据库中选择用户帖子

var posts = db.BlogUser.First(s => s.Email == User.Identity.Name).Select(t => t.Posts).ToList(); 
2

对于第一个问题,其中显示您的所有帖子,这是因为您没有对帖子应用过滤器。您需要由用户过滤它。

var posts = db.Posts.Where(p => p.BlogUserEmail == User.Identity.Name) 
      .Include(p => p.BlogUser).Include(p => p.Category); 

    return View(posts.ToList()); 

对于所有用户详细信息中显示的第二部分,根据您的要求显示电子邮件属性或名称。您目前正在传递整个对象。

@Html.LabelFor(model => model.BlogUser.Email)