我想我有一個高級時刻,但我也認爲我之前沒有遇到過這種情況。我在我的MVC5 Identity 2.1 Users
表中有兩列。顯示相同表格中的相關數據
UserId | BannedBy (and also an IsBanned bool)
這兩個字段都是userid guid字符串。但是,BannedBy引用同一用戶表中的不同用戶。
當我顯示禁止用戶的視圖(一個表和每行都是一個禁用用戶)時,我不想顯示BannedBy guid,我想顯示該BannedBy guid的相關用戶名。但是,我似乎無法弄清楚我需要做什麼。
我已經嘗試了視圖模型和方法的方法:
public ActionResult BannedUsers()
{
var bannedUsers = db.Users.Where(d => d.IsBanned);
var model = new BannedUsersViewModel
{
BannedUsers = bannedUsers,
BannedByUserName = GetUserName(bannedUsers.BannedBy)
};
return View(model);
}
然後像一個外部的方法來我的視圖模型:
var model = new BannedUsersViewModel
{
BannedUsers = bannedUsers
};
model.BannedByUserName = GetUserName(model.bannedUsers.BannedBy);
但是,似乎我不能使用bannedUsers.BannedBy (我還嘗試了所有上面的大寫字母B ... BannedUsers.BannedBy)數據,然後才真正呈現它們?現在我已經報廢的視圖模型,我試圖做類似的相關數據上我的查詢聯接:
db.Users.Join(d => d.BannedBy == d.UserId).Where(d => d.IsBanned);
(我敢肯定,這是遙遠的,我只是想給你一個想法)
有沒有人知道這樣做的正確方法?我也在考慮從我的角度調用一種方法,但似乎這會違反MVC規則?
謝謝。
更新:這裏是GetUserName方法:
public string GetUserName(string userId)
{
var result = db.Users.Find(userId);
return result.UserName;
}
更新#2:這裏是BannedUsersViewModel:
public class BannedUsersViewModel
{
public IEnumerable<ApplicationUser> BannedUsers { get; set; }
public string BannedByUserName { get; set; }
}
您還可以顯示擴展用戶實體及其映射嗎?因爲你需要配置自己加入用戶實體 – lazy
那麼,如果'BannedUsers'是一個被禁止的用戶列表,那麼'BannedByUserName'確實不需要是禁止這些用戶的用戶列表?我覺得'GetUserName'只有一個'Guid'。雖然我可能是錯的。 –
@Jason Boyd是的,你是對的。 GetUserName只是使用guid在db.Users表上進行提取。我將編輯我的帖子以包含該內容。我仍在消化你寫的其他內容......謝謝。 – SumNone