2013-10-24 88 views
15

我所選擇的值不爲Html.DropDownList輔助方法,工作的問題,請看下圖:。Html.DropDownList選定值不工作(使用IEnumberable構造<SelectListItem>

這是我的控制器:

public ActionResult Edit(int id = 0) 
{ 
    NewsEvent item = GetItem(id); 
    ViewBag.NewsItemId = new SelectList(ViewBag.NewsItemId.Items, "Id", "Name", item.NewsItemId); 

    return View(item); 
} 

這是我的看法:

@Html.DropDownList("NewsItemId",ViewBag.NewsItemId as SelectList, string.Empty, 
          new { @class = "form-control" }) 

然而,當我嘗試下面通過查看它的工作原理:

@Html.DropDownList("NewsItemId", string.Empty) 

下面也有效,但由於字段名稱與模型不匹配,所以無法正確發佈。

@Html.DropDownList("NewsItemIdDrop",ViewBag.NewsItemId as SelectList, string.Empty, 
          new { @class = "form-control" }) 

我需要使用第一個選項的原因是,我可以將類屬性添加到控件。

有人能幫我理解我做錯了什麼嗎?

+0

[DropDownListFor不選擇值]的可能重複(http://stackoverflow.com/questions/2278056/dropdownlistfor-not-selecting-value) – freshbm

回答

40

你這裏有同樣的問題:

DropDownListFor Not Selecting Value

問題是在你的ViewBag屬性名稱。因爲它與Model中的屬性相同,所以不起作用。你應該只改變名稱的ViewBag道具別的東西,如:

ViewBag.NewsItemList = new SelectList(ViewBag.NewsItemId.Items, "Id", "Name", item.NewsItemId); 

和查看

@Html.DropDownList("NewsItemId",ViewBag.NewsItemList as SelectList, string.Empty, 
          new { @class = "form-control" }) 
+0

非常感謝,做出了改變,它的工作。 –

+1

在這裏有同樣的問題。謝謝 – rikket

+1

這個bug是邪惡的。不使用ViewBags和View Dictionaries的好理由。這是.NET 4.5的錯誤嗎?它可能已經打破了升級...? – Jess

1

首先,你如何填充ViewBag.NewsItemId.Items?我們沒有看到價值從何而來。

爲了使選定的值有效,它必須與您的集合中的元素具有相同的類型。如果item.NewsItemId的類型爲T,ViewBag.NewsItemId.Items必須是IEnumerable<T>(或其他任何實現它的集合類型)。它似乎並不是這種情況,因爲您將NewsItemId設置爲選定的值,而您的收藏基於NewsItemId.Items,它們可能不是同一類型。

2

我不喜歡的事實,你可以使用

@Html.DropDownList("NewsItemID") 

和有用。然後你需要添加'class'屬性並突然中斷。我看到一個地方工作,另一個不使用語法

@Html.DropDownList("NewsItemId",ViewBag.NewsItemId as SelectList, string.Empty, 
         new { @class = "form-control" }) 

當我研究這方面的工作,我決定ViewBag.NewsItemId竟是在視圖空。因此,一個工作的語法,與具有相同的名稱型號和ViewBag領域是

@Html.DropDownList("NewsItemId", null, string.Empty, 
         new { @class = "form-control" }) 
2

我試過很多東西,但最終得到了它的工作是這樣

在控制器

int valittu_tila = 1; 
var tapahtumantilat = new List<SelectListItem>(); 

tapahtumantilat.Add(new SelectListItem { Text = "Tapahtumaa kirjataan", Value = "0" }); 
tapahtumantilat.Add(new SelectListItem { Text = "Odottaa jonossa", Value = "1"}); 
tapahtumantilat.Add(new SelectListItem { Text = "Tapahtumaa käsitellään", Value = "2"}); 

ViewBag.tilalista = new SelectList(tapahtumantilat, "Value", "Text", valittu_tila); 

然後在我看來,我只是把(我有onchange事件和班級下拉也在這裏,但你可以刪除那些如果你想)。

@Html.DropDownList("tuki_tila", ViewBag.tilalista as SelectList, "-- valitse tila --", new { @onchange = "executeticketsearch();", @class = "haku_dropdowns" }) 

(很抱歉在文本值和變量名的芬蘭,但這些不應該事:d)

0

你應該改變你的DropDownList領域的非常名字:

@Html.DropDownList("Some_Name_that_does_not_exist_in_model", ViewBag.NewsItemId as SelectList, string.Empty, new { @class = "form-control" }) 
0

將viewbag屬性名稱更改爲其他在頁面上使用的模型變量名稱。

+0

你能否提供更多細節來解決這個問題? – Graham

0
@Html.DropDownList("NewsItemId",ViewBag.NewsItemId as SelectList, string.Empty, 
    new { @class = "form-control" }) 

變化

@Html.DropDownList("NewsItemId", ViewBag.NewsItemIdList as SelectList, string.Empty, 
    new { @class = "form-control" }) 

ViewBag.NewsItemIdList更名。也在控制器中改變。