【问题标题】:DropDownList not getting selected - MVC4DropDownList 没有被选中 - MVC4
【发布时间】:2013-03-11 12:49:00
【问题描述】:

我有如下视图中的 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; }

【问题讨论】:

  • 在控制器中,您是从数据库中获取用户详细信息还是创建新对象?
  • 我正在编辑([GET] 请求Edit)...即。我正在获取数据。我完成了大部分调试,并且在userdetail.RoleID 中得到了正确的值

标签: asp.net-mvc asp.net-mvc-4 html.dropdownlistfor list.selectedvalue


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 可以,这是不好的做法。它就像过去的全局变量。从可读性、可维护性的角度来看,它很容易设置和开始,当您需要返回代码时,它会将您返回。同样重要的是 - 它不是强类型,这是可能的错误的另一个来源。使用 View Model,您可以使用强类型属性来呈现选择列表、字符串[] 或 List 等,但可以是任何东西。希望它澄清。
【解决方案2】:

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

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

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

编辑

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

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

【讨论】:

  • 但我找不到需要 selectedItem 参数的重载
  • 我正在从控制器设置SelectList,您可以在我的问题中看到,即编辑操作。另外我从那里将 SelectedValue 设置为正确的值(最后一个参数)......当我调试时,我可以看到正确的值被设置为选中,但不幸的是我没有在视图中得到它(我也在视图渲染中调试区域也)
  • 这可能是因为您将SelectList 转换为IEnumerable&lt;SelectListItem&gt;。这将携带您的物品,但不是选定的价值。将其投射为真正的蓝色SelectList,看看是否不能解决问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-16
  • 1970-01-01
  • 2011-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多