asp.net-mvc - MVC4 SelectList 未选择默认对象

标签 asp.net-mvc selectlist

我的选择列表没有选择通过代码引入的默认对象。

我首先像这样创建我的 SelectList:

public SelectList CreateSelectList(object objSelected = null)
{
  return new SelectList(GetAll().OrderBy(s => s.NumericalValue), "PeriodID", "Name", objSelected);
}

我的 objSelected 填充了一个与 PeriodID 关联的 Guid。

在我的 Controller 中,我将我的 viewbag 变量定义为新的选择列表。

public ActionResult Edit(Guid id)
{
  Classroom classroom = classroomRepository.GetByID(id);
  ViewBag.PeriodID = periodRepository.CreateSelectList(classroom.PeriodID);
  return View(classroom);
}

然后在我的 View 中显示我的 SelectList 的方式如下:

<div class="control-group">
  @Html.LabelFor(model => model.PeriodID, "Period", new { @class = "control-label" })
  <div class="controls">
      @Html.DropDownListFor(model => model.PeriodID, ViewBag.PeriodID as SelectList, String.Empty, new { @class = "span3" })
      @Html.ValidationMessageFor(model => model.PeriodID)
  </div>
</div>

最佳答案

这里有两个问题。首先,这个:

@Html.DropDownListFor(model => model.PeriodID, ViewBag.PeriodID as SelectList, 
      String.Empty, new { @class = "span3" })

将 ViewBag.PeriodID 更改为 ViewBag.Periods 或 ViewBag.PeriodList。这很令人困惑,如果您使用相同的命名对象,在很多情况下 MVC 都会感到困惑。最好确保一切都以不同的方式命名。

其次,SelectList类忽略了SelectListItem的selecteditem成员。它根本没有被使用。 DropDownListFor 将采用 model.PeriodID 的值并将其设为选定值。但是,我在您的代码中看到它们应该相同,所以我猜命名可能是这里的一个因素。

关于asp.net-mvc - MVC4 SelectList 未选择默认对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12655479/

相关文章:

asp.net-mvc - Asp.net mvc 选择列表

asp.net-mvc - 将 SelectList "SelectedValue"传递给 Controller ​​操作方法

javascript - 为什么这个 javascript 在 IE 中运行这么慢,而它所做的只是修改一个选择列表?

c# - MVC SelectList 中的 LINQ 查询结果作为值和文本 - 不起作用

javascript - Ajax.BeginForm OnBegin 确认 Via jquery modal

c# - 如何在 ASP.NET MVC 上同时执行 Azure Active Directory 单点登录和表单例份验证

c# - 开发和测试环境的不同 DateTimeFormat

c# - 如何在 Application_BeginRequest 中执行击中网络服务器的第一个请求的部分代码?

c# - IIS 抛出 ThreadAbortException 并回收 worker,IIS 日志记录为 "IIS configuration change"的可能原因是什么?

c# - linq 中不允许使用 String.Format 或 toString