2015-04-18 120 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)