1

単純な状況

1 つのオブジェクト User には多くの UserGroup があります。

ドロップダウンから UserGroups を選択するためのアクションを編集または作成する mvc3 フォームに実装したいと考えています。

コントローラ:

private List<User> GetAllUsers()
{
    List<User> users;
    users = find all users to List...
    return users;
}

public ActionResult Edit(Guid Id)
{
   ViewBag.UserGroups = new SelectList(GetAllUsers(), "UserId", "Name");
   return View();
}

意見:

<div class="editor-label">
    @Html.LabelFor(model => model.UserGroupId, "UserGroupId")
</div>
<div class="editor-field">
    @Html.DropDownList(WHAT TO PUT HERE ?);
    @Html.ValidationMessageFor(model => model.UserGroupId)
</div>
4

3 に答える 3

5

ああ、View Model を使用してください。ViewBag のがらくたをカットしてください。見るたびにうんざりします。

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

その後:

public ActionResult Edit(Guid Id)
{
    var model = new UserViewModel
    {
        UserGroups = new SelectList(GetAllUsers(), "UserId", "Name")
    }
    return View(model);
}

そしてビューで:

@model UserViewModel
...
<div class="editor-label">
    @Html.LabelFor(model => model.UserGroupId, "UserGroupId")
    </div>
    <div class="editor-field">
        @Html.DropDownListFor(x => x.UserGroupId, Model.UserGroups);
        @Html.ValidationMessageFor(model => model.UserGroupId)
    </div>
</div>

しかし、あなたが私を病気にしてViewCrapを維持したい場合:

@Html.DropDownListFor(
    x => x.UserGroupId, 
    (IEnumerable<SelectListItem>)ViewBag.UserGroups
)
于 2012-08-20T21:25:02.217 に答える
0

コントローラーで:

ViewBag.UserGroupId = new SelectList(GetAllUsers(), "UserId", "Name");

ビューで:

@Html.DropDownListFor(m => m.UserGroupId, null);

代わりにタイプ セーフが必要な場合は、次のヘルパー メソッドを使用できます。

void SetSelectList<TModel, TProperty>(
   TModel model, 
   Expression<Func<TModel, TProperty>> propertySelector, 
   IEnumerable<SelectListItem> list) {

   this.ViewData[ExpressionHelper.GetExpressionText(propertySelector)] = list;
}

次のように使用します。

SetSelectList(model, m => m.UserGroupId, new SelectList(GetAllUsers(), "UserId", "Name"));


おまけのヒント:インスタンスToDictionaryを作成するときの型安全性を高めるために使用します。SelectList

new SelectList(GetAllUsers().ToDictionary(u => u.UserId, u => u.Name), "Key", "Value")
于 2012-08-20T21:33:11.863 に答える