2012-09-29 57 views
2

我的选择列表未选择通过代码引入的默认对象。未选择MVC4 SelectList默认对象

我第一次创建我的SelectList像这样:

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

我objSelected被充满了与该PeriodID关联的GUID。

在我的控制器内部,我将我的viewbag变量定义为新的选择列表。

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

当年这里就是我如何显示我的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> 
+0

和什么应该是默认对象? – Thousand

+0

默认对象应该是一个名为“Fourth”的项目,与传入的Guid关联。问题是,View中没有显示任何内容,它只是SelectList中的第一项。 –

+0

以及现在显示的默认对象是什么?如果我理解正确,默认值必须来自你正在返回的列表? – Thousand

回答

7

您在这里有两个问题。首先,这样的:

@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的值并使其成为选定值。不过,我在你的代码中看到这些应该是相同的,所以我猜这里的命名可能是一个因素。

+0

它似乎是一个命名问题,在我将ViewBag.PeriodID重命名为ViewBag.PeriodList后,它就起作用了。谢谢! –

+0

@韦斯利帕蒂森 - 是的,我想通了。但是,关于SelectedItem的观点仍然有效。它被忽略了,它碰巧在这个实例中工作,因为你在DropDownListFor中使用了与你的ID相同的变量,因此将选定项传递给方法的代码是毫无意义的 –