Asp.net mvc 未选择DropDownList-MVC4

Asp.net mvc 未选择DropDownList-MVC4,asp.net-mvc,asp.net-mvc-4,html.dropdownlistfor,list.selectedvalue,Asp.net Mvc,Asp.net Mvc 4,Html.dropdownlistfor,List.selectedvalue,我的下拉列表如下所示 @Html.DropDownListFor(model => model.RoleID, (IEnumerable<SelectListItem>)ViewBag.RoleID, new { @class = "dropdownlistCustom" }) @Html.DropDownList("RoleID", (IEnumerable<SelectListItem>)ViewBag.RoleID, new { @class = "dropd

我的下拉列表如下所示

@Html.DropDownListFor(model => model.RoleID, (IEnumerable<SelectListItem>)ViewBag.RoleID, new { @class = "dropdownlistCustom" })
@Html.DropDownList("RoleID", (IEnumerable<SelectListItem>)ViewBag.RoleID, new { @class = "dropdownlistCustom" })
@Html.ValidationMessageFor(model => model.RoleID)
型号:

[Display(Name = "Name Of the Role")]
public int RoleID { get; set; }
[ForeignKey("RoleID")]
public virtual Role Roles { get; set; }

这是因为您没有正确使用
DropDownListFor
。您所追求的函数定义是:

DropDownListFor(lambda, selectList, *selectedItem*, htmlAttributes)
RoleId
应作为
selectedItem
参数传递,因此您缺少
selectList
参数。MVC不会使用
DropDownListFor
自动为您创建该列表,您必须通过内联创建它、将它传递到
ViewBag
或在您的模型上设置它并指定要使用的属性来告诉它要使用的选择列表

编辑

对不起。那是我的错。现在还早,我们损失了一个小时(夏令时),所以我的大脑还没有完全恢复。我混合了
DropDownListFor
DropDownList
。使用
DropDownListFor
,所选项目来自模型上的设置值,但您仍然需要提供适当的
SelectList
。似乎您正在尝试指定所选项目,您应该在其中告诉它要使用的
SelectList


如果要使用
DropDownList
,则需要同时指定要使用的
SelectList
和所选值。

这是因为没有正确使用
DropDownListFor
。您所追求的函数定义是:

DropDownListFor(lambda, selectList, *selectedItem*, htmlAttributes)
RoleId
应作为
selectedItem
参数传递,因此您缺少
selectList
参数。MVC不会使用
DropDownListFor
自动为您创建该列表,您必须通过内联创建它、将它传递到
ViewBag
或在您的模型上设置它并指定要使用的属性来告诉它要使用的选择列表

编辑

对不起。那是我的错。现在还早,我们损失了一个小时(夏令时),所以我的大脑还没有完全恢复。我混合了
DropDownListFor
DropDownList
。使用
DropDownListFor
,所选项目来自模型上的设置值,但您仍然需要提供适当的
SelectList
。似乎您正在尝试指定所选项目,您应该在其中告诉它要使用的
SelectList


如果要使用
DropDownList
,则需要同时指定要使用的
SelectList
和所选值。

首先,我建议您不要使用ViewBag,而是查看模型,以便将选择列表(或选择列表的数据)从控制器传递到视图

第二,我鼓励您查看
dropdownlist的用法,或者(最好同时查看两者)。我认为你过于复杂化了
SelectList
。它越简单,您就越不会对它为什么不能按预期工作感到困惑。只需以现有示例为例,将变量名更改为您的

另一个不使用
ViewBag
的重要提示是,当您构建视图模型时,您可以在控制器中构建一个选择列表,从其中获取数据。然后在视图中,您只需要使用提供了
SelectList
参数的预构建视图模型属性-更干净、更好。视图应该对数据进行最少的操作,但只能在正确的位置以正确的方式以正确的格式显示数据

只要看看我提供的这些例子,我相信你足够聪明,知道如何正确地使用
DropDownListFor
,这非常简单,你只需要在正确的位置提供正确的参数,看看其他人做了什么,然后做同样的事情


希望这有帮助,请随时向我通报你的进展情况

首先,我鼓励您不要使用ViewBag,而是使用视图模型将选择列表(或选择列表的数据)从控制器传递到视图

第二,我鼓励您查看
dropdownlist的用法,或者(最好同时查看两者)。我认为你过于复杂化了
SelectList
。它越简单,您就越不会对它为什么不能按预期工作感到困惑。只需以现有示例为例,将变量名更改为您的

另一个不使用
ViewBag
的重要提示是,当您构建视图模型时,您可以在控制器中构建一个选择列表,从其中获取数据。然后在视图中,您只需要使用提供了
SelectList
参数的预构建视图模型属性-更干净、更好。视图应该对数据进行最少的操作,但只能在正确的位置以正确的方式以正确的格式显示数据

只要看看我提供的这些例子,我相信你足够聪明,知道如何正确地使用
DropDownListFor
,这非常简单,你只需要在正确的位置提供正确的参数,看看其他人做了什么,然后做同样的事情


希望这有帮助,请随时向我通报你的进展情况

在controller中,您是从db获取userdetail还是创建新对象?我正在进行编辑(
[GET]
请求
编辑
)。。。我正在提取数据。我完成了大部分调试,并且在
userdetail.RoleID
中获得了正确的值。在controller中,您是从db中获取userdetail还是创建新对象?我正在进行编辑(
[GET]
请求
编辑
)。。。我正在提取数据。我完成了大部分调试,并且在
userdetail.RoleID
中得到了正确的值,但是我找不到一个重载,它使用
selectedItem
param。我正在从控制器设置
SelectList
,您可以在我的问题中看到,编辑操作。此外,我正在将SelectedValue设置为正确的值(最后一个参数)。。。当我调试时,我可以看到正确的值被设置为selected,但不幸的是,我没有在视图中获得该值(我也在视图渲染区域中调试了该值)