linq in mvc using entity framework



我的 mvc 页面上遇到了几个问题。当用户登录时,他们应该看到他们创建的帖子,但是目前用户可以看到所有用户的所有帖子。(来自我的索引页的 Linq 问题)

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

我刚才得到的结果是这样的:

![在此输入图像描述][1]

视图:

<table>
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.BlogUser)
        </th>

控制器:

    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]

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());

也许?

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

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)

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

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

最新更新