1

我有如下视图中的 DropDownList,

@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)

都试过了DropDownListDropDownListFor都没有正确SelectedValue

在 Controller 中,我正在设置selectedValue参数(请参阅 SelectList() 的最后一个参数)。

public ActionResult Edit(int id = 0)
{
    UserDetail userDetail=db.UserDetails.Find(id);
    if(userDetail!=null)
    {
       ViewBag.RoleID = new SelectList(db.Roles.Where(r => r.RoleStatus == "A"), "RoleID", "RoleName", userdetail.RoleID);
       return View(userdetail);
    }
}

模型 :

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

2 回答 2

1

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

其次,我鼓励你看一下这个例子这个例子(最好是两者)的DropDownListFor用法。我认为你过于复杂了SelectList。它不那么简单,您不会对为什么它没有按预期工作感到困惑。只需以现有示例并将变量名称更改为您的。

为什么不使用ViewBag的另一个重要提示是,当您构建视图模型时,您可以在控制器中构建一个选择列表,您可以从任何地方获取数据。然后在视图中,您只需要使用提供参数的预构建视图模型属性SelectList- 更简洁更好。View 应该对数据进行最少的操作,而只是在正确的位置以正确的方式以正确的格式呈现它。

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

希望这会有所帮助,请随时向我发布您的进度。

于 2013-03-11T13:20:17.847 回答
0

那是因为你没有DropDownListFor正确使用。您所追求的功能定义是:

DropDownListFor(lambda, selectList, *selectedItem*, htmlAttributes)

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

编辑

对不起。那是我的错。现在还早,我们浪费了一个小时(夏令时),所以我的大脑还没有全部到。我混合DropDownListForDropDownList。使用DropDownListFor,选择的项目来自模型上的设定值,但您仍然需要提供适当的SelectList。看来您正在尝试指定您应该告诉它SelectList使用什么的选定项目。

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

于 2013-03-11T13:05:17.777 回答