2013-12-11 26 views
0

我想從我的網站上的數據庫顯示不同的信息,取決於哪個用戶登錄。我剛剛開始使用MVC(已經完成了一些教程,並可以通過我在網頁上的觀點查看信息。)現在我想要過濾登錄用戶的數據。我在想某個where子句。我想在這個控制器上下文從db獲取數據。如何獲得等於我的MVC中的特定用戶的數據?

但是如何?或者這是錯誤的地方?請告訴我,如果你需要一些更多的信息.​​.

我試圖用 db.Contacts.ToList().Where(),但我不獲得訪問用戶名在這裏..

private ApplicationDbContext db = new ApplicationDbContext(); 

// GET: 
public ActionResult Index() 
{ 
    return View(db.Contacts.ToList()); 
} 
+0

你的表結構是怎樣的? – Shyju

回答

2

什麼是您的聯繫人類是什麼樣子?據推測,有一個外鍵指向聯繫人所屬的用戶。喜歡的東西:

public class Contact 
{ 
    public int ContactId { get; set; } 
    public int UserId { get; set; } // the Id of the User the contact belongs to 
    public string Name { get; set; } 
    public string Phone { get; set; } 
} 

然後,您可以對用戶ID過濾:

return View(db.Contacts.Where(c => c.UserId == CurrentUserId).ToList()); 

您可以通過查看您的控制器的User.Identity.Name屬性獲取當前用戶ID。假設當用戶身份驗證您保存自己的用戶名

public ActionResult Index() 
{ 
    User current = db.Users.Single(u => u.Username == User.Identity.Name); 

    return View(db.Contacts.Where(c => c.UserId == current.Id).ToList()); 
} 

爲了方便起見,我把CurrentUserId呼叫基地控制器,所以任何動作可以只是參考CurrentUserId並在它的途中。

+0

我基本上是一樣的,除了不是把CurrentUserId放在基本控制器中,而是把它放在一個實用工具類中,該工具類從會話中抽取(這在我們的系統中是一個昂貴的查找),或者如果從會話中丟失,則檢索它。這對我們來說有點性能提升,可以在多個控制器之間重複使用,並且讓它們更加清潔。 –

+0

我同意,我對緩存當前用戶做了同樣的事情。我喜歡我的基礎控制器上的CurrentUser屬性,並使用OnActionExecuting()從緩存/會話中查找。這樣個別行動不需要做任何特別的事情,他們可以使用CurrentUser。對於單元測試,它讓我繞過Session(因爲OnActionExecuting()不會觸發),並且只需手動設置CurrentUser屬性。 – mfanto

+0

謝謝,正是我需要的! –

相關問題