我會創造這是適用於List<user>
或任何你userRepository.GetAll(擴展方法)返回這樣的話在你的代碼,你可以只用
ViewData["Users"] = userRepository.GetAll().ToSelectList();
編輯的代碼示例替換所有這些用法:有2種方法可以做到這一點
public static List<SelectListItem> ToSelectList(this List<Agent> users)
{
List<SelectListItem> items = new List<int>();
foreach (var user in users)
{
var item = new SelectListItem { Text = user.FriendlyName,
Value = user.UserId.ToString() };
if (User.Identity.Name == user.UserName)
item.Selected = true;
items.Add(item);
}
return items;
}
和使用情況會是這樣
userRepository.GetAll().ToSelectList();
或者,如果你有問題的擴展方法身份是有
public static List<SelectListItem> ToSelectList(this List<Agent> users,
string selectedUserName)
{
List<SelectListItem> items = new List<int>();
foreach (var user in users)
{
var item = new SelectListItem { Text = user.FriendlyName,
Value = user.UserId.ToString() };
if (user.UserName == selectedUserName)
item.Selected = true;
items.Add(item);
}
return items;
}
和使用情況會是這樣
userRepository.GetAll().ToSelectList(User.Identity.Name);
是的,我對其他類似情況有這種方法。問題?是我需要將當前用戶設置爲選定的項目。解決這個問題的最好方法是什麼? – alexn 2009-09-23 13:48:39
User.Identity.Name已經是靜態的,所以你可以在你的擴展方法中使用它。 – 2009-09-23 13:51:30
我可能會爲該代碼添加一些空的檢查,因爲Identity可能並不總是存在,比如在單元測試期間,如果在測試用例中調用它,那麼跳過Selected = true塊會比拋出異常更好。 – 2009-09-23 13:52:55