2013-03-28 36 views
4

好,幾個小時後,不成功嘗試所有的解決方案,還發現this article,我認爲它會救我的命...什麼都沒有。Html.DropDownList選定值不工作使用ViewBag

長話短說。

這裏是我的看法(所有組合)

@Html.DropDownList("yearDropDown",(IEnumerable<SelectListItem>)ViewBag.yearDropDown) 
@Html.DropDownList("yearDropDownxxx",(IEnumerable<SelectListItem>)ViewBag.yearDropDown) 
@Html.DropDownList("yearDropDown",(<SelectList>)ViewBag.yearDropDown) 
@Html.DropDownList("yearDropDown") 

這裏是我的控制器

public ActionResult(int year) 
{ 
var years = new int[] { 2007, 2008, 2009, 2010, 2011, 2012 } 
       .Select(x => new SelectListItem { 
        Text = x.ToString(), 
        Value = x.ToString(), 
        Selected=x==year }).Distinct().ToList(); 

      years.Insert(0, new SelectListItem { Value = null, Text = "ALL YEARS" }); 
      ViewBag.yearDropDown = new SelectList(years, "Value", "Text", years.Where(x => x.Selected).FirstOrDefault()); 
return View(); 
} 

這是我提供的HTML。選擇無處可尋。

<select id="yearDropDown" name="yearDropDown"><option value="">ALL YEARS</option> 
<option value="2007">2007</option> 
<option value="2008">2008</option> 
<option value="2009">2009</option> 
<option value="2010">2010</option> 
<option value="2011">2011</option> 
<option value="2012">2012</option> 
</select> 

不用說,但我會,我檢查了我的收藏和的SelectList實際上已經填充了選定的一年過去了控制器SelectedValue屬性。但是當我在視圖中渲染時,它會轉到第一個選項。

請,我需要爲DropDownList的解決方案,而不是DropDownListFor。我強調這一點,因爲我看到其他人在這裏要求相同的幫助,一羣人給他們指示,並幾乎訂購他們,使用DropDownListFor。有一個原因,我需要使用DropDownList。

SOLUTION: 看我自己的答案。 但是,以下是我所做的簡單更改。

控制器:

ViewBag.yearDropDown = years; 

查看:

@Html.DropDownList("yearDropDown") 

回答

0

更改ViewBag屬性的名稱不匹配的DropDownList的名稱。 使用ViewBag.yearDropDownDD,而不是ViewBag.yearDropDown

此外,您錯誤地創建的SelectList。 您需要將選定的值不是數組項:

ViewBag.yearDropDown = new 
SelectList(years, "Value", "Text", years.Where(x => x.Selected).FirstOrDefault().Value); 
+0

如果你看看我在視圖中的第二個例子,那正是我所做的。也沒有幫助。找到你的解決方案。看看我自己的答案。感謝您的時間和關注。 –

+0

@Tony,解決方案是什麼? – Romias

+0

我用解決方案編輯了我的問題。謝謝 –

-2

的第一個地方我應該去學習....,我沒有。

Here is my solution

謝謝你對你的答案。真的很感激它。我覺得現在就開始自己的腳了。兩個小時閱讀博客和我花了2分鐘,重複這個例子和工作完美......這裏

+1

解決方案是什麼? – Romias

+0

我用解決方案編輯了我的問題。謝謝。 –

2
ViewBag.yearDropDown = new SelectList(years, "Value", "Text", years.Where(x => x.Selected).FirstOrDefault()); 

最後一個參數是SelectListItem,但它必須(在你的例子字符串)來選擇value

SelectList Constructor (IEnumerable, String, String, Object)

+0

有趣...我還沒有測試過,但我認爲你是對的。我正在返回整個對象。謝謝 –

18

的問題也可能是名字,在這裏看到。

在控制器

ViewBag.PersonList= new SelectList(db.Person, "Id", "Name", p.PersonId); 

在查看

@Html.DropDownList("PersonList",(SelectList)ViewBag.PersonList) 

這樣可不行,你要改名字,所以它是不一樣的。

@Html.DropDownList("PersonList123",(SelectList)ViewBag.PersonList) 

因此,改變yearDropDown,它會爲你工作。

問候 基督教Lyck。

+0

+1它爲我工作 – feradz

+0

上編輯,如何知道從列出的 – SAR

+0

選定的一個(這是選定的)這對我工作... – Bharat

1

我知道它的一個老問題,但我將分享另一種解決方案,因爲有時你必須正確地做任何事,但你不能看到一個請求和響應後,所選擇的價值,因爲你的剃鬚刀有錯誤可能。在這種情況下,我已經有,你可以使用viewbag使用select選項:

在控制我有:

ViewBag.MyData = GetAllData(strSelected); 
... 

,並在控制器中的私有函數我有:

private List<SelectListItem> GetAllData(List<string> selectedData) 
    { 

     return MyGetAll().Select(x => 
      new SelectListItem 
      { 
       Text = x.Point, 
       Value = x.Amount.ToString(), 
       Selected = selectedPrizes.Contains(x.Amount.ToString()) 
      }) 
      .ToList(); 
    } 

而在.cshtml我:

<select id="Amount" name="Amount" multiple="multiple"> 
    @foreach (var listItem in (List<SelectListItem>)ViewBag.MyData) 
    { 
    <option value="@listItem.Value" @(listItem.Selected ? "selected" : "")> 
     @listItem .Text 
    </option> 
    } 
</select> 

我希望這將是有益的類似問題:)

相關問題