asp.net mvc中的多个下拉列表到actionresult

时间:2015-02-23 13:47:59

标签: c# jquery asp.net-mvc drop-down-menu

我正在使用jquery选择多个下拉列表。

我有来自所选下拉列表的多个值。

HTML

    @using (Html.BeginForm()) {
    <div class="editor-field" style="width:150px;">

    @Html.DropDownList("UserRole", null, new { @class = "chosen-select",@multiple="multiple",@placeholder="Lütfen Rol Seçiniz",@style="width:250px;"})

    </div>

    <input type="submit" value="Create" />
}

当我点击创建按钮按钮提交到actionresult以下

[HttpPost]
public ActionResult AddUser(List<UserRole> UserRole) 
{
return view();
}

发布时,UserRole始终为空

下面的UserRole类属性

public int UserRoleID { get; set; }
public Nullable<int> FirmUserID { get; set; }
public Nullable<int> RoleID { get; set; }

我想念如何在多个下拉列表中选择所有值?

任何帮助将不胜感激。

感谢。

2 个答案:

答案 0 :(得分:0)

在您的方案中添加列表框,如此@Html.ListBox("UserRole", null, new { @class = "chosen-select",@multiple="multiple",@placeholder="Lütfen Rol Seçiniz",@style="width:250px;"}),以便找到结果。

答案 1 :(得分:0)

您需要使用ListBox来获取所需的行为,而不是下拉列表。 ListBox可以接受所选角色的数组,以及MultiSelectList以显示所选项目。

我还建议使用视图模型,而不是依赖ViewBag来处理视图状态。有关扩展方法,请参阅CloneMatching

    @model UserRoleViewModel
    ...
    <div>
        <div class="editor-label">
            User Roles<br />(Ctrl-click for multiple)
        </div>
        <div class="editor-field">
            @Html.ListBoxFor(model => model.SelectedRoles,new MultiSelectList(model.AvailableRoles,"Id","Description",Model.SelectedRoles))
        </div>        
    </div>

UserRoleViewModel:

 public class UserRoleViewModel {
     public User { get; set; }

     public List<int> SelectedRoles { get; set; }
     public List<Role> AvailableRoles { get; set; }
 }

UserRoleController:

 public ActionResult Edit(int id) {
     var user = MyDbContext.Users.Find(id);
     var model = new Model {
         User = user;
         SelectedRoles = user.UserRoles.Select(userRole => userRole.Role.Id).ToList();
         AvailableRoles = MyDb.Context.Roles.ToList();
     };
     return View(model);
 }

 [HttpPost]
 public ActionResult Edit(UserRoleViewModel model) {
     if (ModelState.IsValid) {
         var user = MyDbContext.Users.Find(id).CloneMatching(model.User);
         user.UserRoles.Clear();
         MyDbContext.SaveChanges();

         foreach( var roleId in model.SelectedRoles) {
             users.UserRoles.Add(new UserRole {
                 UserId = user.Id,
                 RoleId = roleId
             });
         }
         MyDbContext.SaveChanges();
         return RedirectToAction("Index");
     }        
     return View(model);
 }