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