2012-09-29 58 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相同的變量,因此將選定項傳遞給方法的代碼是毫無意義的 –