SelectList コンストラクターを使用するのではなく、SelectList を手動で作成することをお勧めします。これにより、「UserId」と「Name」の処理に必要な制御が可能になります。これは、選択リストに整数レコード ID を追加する方法の問題にも対処します。
を構築して返すメソッドから始めましょうList<SelectListItem>
public static List<SelectListItem> UserGroups(int userGroupId, int selectedUserId)
{
var userGroupsQuery = from u in dbContext.Users
where u.UserGroupId == userGroupId
select u;
var userSelectList= new List<SelectListItem>();
foreach (var user in userGroupsQuery.Users)
{
userSelectList.Add(
new SelectListItem
{
Text = userGroup.Name,
Value = userGroup.UserId.ToString(CultureInfo.InvariantCulture),
Selected = (user.UserId == selectedUserId)
};
}
return userSelectList;
}
これで、使用できる選択リストができたので、アクション メソッドで使用してみましょう。
int selectedUserId = 1000;
int userGroupId = 5;
var userViewModel = new UserViewModel
{
UserGroups = ListLookup.UserGroups(userGroupId, selectedUserId)
}
return View(userViewModel);
そして、ビューで。
@Html.DropDownList("UserId", Model.Users)
ここで重要なのはValue
、選択リストのプロパティは整数ではなく文字列でなければならないということです。また、デフォルトではラムダ式内で文字列を呼び出すことはできないことに注意してください (したがって、foreach ループが使用されます)。Selected
ほとんどの SelectList の例では、プロパティを使用して SelectList 項目の特定の値を選択する 方法を示していません。
これが役立つことを願っています:)