Asp.net mvc 4 模型中未填充值的mvc4 DropDownList

Asp.net mvc 4 模型中未填充值的mvc4 DropDownList,asp.net-mvc-4,Asp.net Mvc 4,我有一个页面,我想要一个包含角色选择的下拉列表(例如R1、R2、R3):用户将在下拉列表中选择他们想要的角色 我有一个具有int-RoleId属性的视图模型,该属性应该包含用户所选角色的id。我将RoleId设置为默认值1。同样在视图模型上,我创建了一个SelectList,其中包含角色选择列表 视图呈现良好-角色选择都在下拉列表中,我通过设置RoleId指定的角色已被选中 然后我从下拉列表中选择一个不同的角色并发布表单 当我检查模型上RoleId的值时,它仍然设置为原始选择,而不是更改的值。例

我有一个页面,我想要一个包含角色选择的下拉列表(例如R1、R2、R3):用户将在下拉列表中选择他们想要的角色

我有一个具有int-RoleId属性的视图模型,该属性应该包含用户所选角色的id。我将RoleId设置为默认值1。同样在视图模型上,我创建了一个SelectList,其中包含角色选择列表

视图呈现良好-角色选择都在下拉列表中,我通过设置RoleId指定的角色已被选中

然后我从下拉列表中选择一个不同的角色并发布表单

当我检查模型上RoleId的值时,它仍然设置为原始选择,而不是更改的值。例如,在下面的代码中,我将RoleId设置为1,然后通过从视图中的下拉列表中选择,将其更改为2,然后发布。在post操作中返回的模型具有RoleId=1

    public class CreateUserViewModel
        {   
            [Required]
            [Display(Name = "User Name")]
            public string UserName { get; set; }

            [Required]
            public int RoleId { get; set; }
    }

public ActionResult Create()
            {
   var model = new CreateUserViewModel()
   model.RoleId=1;
   return View(model);
}

     [HttpPost]
            public ActionResult Create(CreateUserViewModel model)
            {
// RoleId=1 here, but should be 2
}
在我看来,我有以下几点

 @Html.DropDownListFor(m => m.RoleId, (IEnumerable<SelectListItem>)ViewBag.RolesList)
有什么想法吗?

当我移除

@Html.HiddenFor(m => m.RoleId)

它开始工作了

我很困惑,你说你在视图模型中创建了列表,但是你发布的代码显示你正在通过视图包传递列表。查看“渲染”下拉列表中的值。选项的值是否不同?您只需要在控制器中填充一个下拉列表,在您的视图中,您将选择一个选项,相应的Id将发布回控制器,对吗?正确就绪。我得到了一个值,但它是最初在视图中的值,而不是在drodownMatt中更改所选选项时更改的值。很抱歉,我键入了视图模型而不是视图包。
@Html.HiddenFor(m => m.RoleId)