1

コンボボックス内の値を操作するためにビューモデルを使用してこのアプローチを使用しています。現在、コンボの最初の値ではなく、作成アクションで使用される実際の選択値をデフォルト値として選択するのに苦労しています。これが 4 番目のパラメーターでSelectListあることはわかっていますが、実際の使用方法がわかりません。 UserGroupIdこれらのように使用するとエラーが発生します。

var model = new UserViewModel 
    { 
        UserGroups = new SelectList(GetAllUsers(), "UserId", "Name", UserGroupId) 
    } 
    return View(model); 

 public class UserViewModel 
    { 
        public int UserGroupId { get; set; } 
        public IEnumerable<SelectListItem> UserGroups { get; set; } 
    } 
4

3 に答える 3

1

このような:

var model = new UserViewModel 
{ 
    // preselct an item in the dropdown whose value equals 5
    // This means that inside your `GetAllUsers()` collection you must
    // have an element with UserId=5 and this element will automatically be
    // preselcted. Here you could put any value of course
    UserGroupId = 5,
    UserGroups = new SelectList(GetAllUsers(), "UserId", "Name") 
};
return View(model);

そしてあなたの見解では:

@model UserViewModel
...
@Html.DropDownListFor(x => x.UserGroupId, Model.UserGroups)
于 2012-08-26T18:10:47.717 に答える
0

4番目のパラメーターについては、GetAllUsers()によって返されるコレクションの一部である実際のインスタンスである必要があります。

例えば:

var users = GetAllUsers();
var defaultUser = users[0];
var model = new UserViewModel 
{ 
     UserGroups = new SelectList(users, "UserId", "Name", defaultUser) 
};

return View(model);
于 2012-08-26T18:15:02.283 に答える
0

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 項目の特定の値を選択する 方法を示していません。

これが役立つことを願っています:)

于 2012-08-27T17:59:53.880 に答える