从视图模型中的下拉列表中获取提交的数据?

时间:2017-02-14 17:01:10

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

我有一个用于用户管理的人员控制器,我试图弄清楚当用户从编辑页面提交时如何获得下拉选项。每当我点击页面上的提交时,视图模型中的任何值都不会显示在帖子中。我无法从下拉菜单中获得他们选择的价值来设置角色。

请参阅下面的视图模型:

public class PersonViewModel
{
    public int PersonId { get; set; }
    [Display(Name = "Full Name")]
    public string FullName { get; set; }
    public string Email { get; set; }
    [Display(Name = "Current Role")]
    public string SetRole { get; set; }
    public List<RoleListViewModel> Roles { get; set; }
}

请参阅下面的控制器编辑功能:

// GET: People/Edit/5
    public ActionResult Edit(int? id)
    {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        Person person = db.people.Find(id);
        if (person == null)
        {
            return HttpNotFound();
        }
        PersonViewModel pvm = new PersonViewModel();
        List<IdentityRole> roles = adb.Roles.ToList();
        var rlvm = new List<RoleListViewModel>();
        roles.ForEach(x => rlvm.Add(new RoleListViewModel { RoleId = x.Id, RoleName = x.Name }));
        pvm.PersonId = person.PersonId;
        pvm.FullName = person.FirstName + " " + person.LastName;
        pvm.Email = person.Email;
        pvm.Roles = rlvm;
        ViewBag.RoleList = new SelectList(rlvm, "RoleName", "RoleName", person.CurrentRole);

        return View(pvm);
    }

    // POST: People/Edit/5
    // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
    // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit(PersonViewModel pvm)
    {
        if (ModelState.IsValid)
        {
            db.Entry(pvm).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        var usr = new AccountController();
        var pers = db.people.Where(x => x.PersonId == pvm.PersonId).FirstOrDefault();
        usr.UserManager.AddToRoleAsync(pers.NetId, /* their choice should go here but how? */);
        db.SaveChanges();


        return View(pvm);
    }

这是cshtml:

    <div class="form-group">
        @Html.LabelFor(model => model.Roles, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="form-control-static">
            @Html.DropDownList("RoleList", null, new { @class = "form-control" })
            @Html.ValidationMessageFor(model => model.Roles, "", new { @class = "text-danger" })
        </div>
    </div>

1 个答案:

答案 0 :(得分:1)

在视图模型中创建一个变量来存储选定的值,然后在视图中使用

@Html.DropDownListFor(m => m.SelectedRoleVariable, RolesSelectList, new { @class = "form-control" });