2012-08-09 35 views
2
foreach (Person person in personList) {        
    SelectListItem item = new SelectListItem(); 
    item.Value = person.Id; 
    item.Text = person.FirstName + " " + person.LastName;      
    items.Add(item); 
} 

ViewData["personSelectList"] = new SelectList(items, "Value", "Text", 4); 

<%=Html.DropDownList("personId", ViewData["personSelectList"] as SelectList)%> 

此代碼未將Id = 4的人設置爲選定項目,而是始終選取列表中的第一個項目作爲選定項目。SelectList未在選擇項目中傳遞選定值

我錯過了什麼步驟?

+0

可能重複http://stackoverflow.com/questions/624828/asp-net-mvc-html-dropdownlist-selectedvalue) – 2012-08-09 14:23:48

回答

2

您是否嘗試過設置項目本身的Selected屬性?例如

foreach (Person person in personList) 
{ 
    items.Add(new SelectListItem() 
    { 
     Value = person.Id, 
     Text = person.FirstName + " " + person.LastName, 
     Selected = person.Id == 4 
    }); 
} 

更新

我認爲你需要通過在視圖中選擇的值傳遞和處理它在那裏,而不是:

ViewData["personSelectList"] = new SelectList(items, "Value", "Text"); 
ViewData["personId"] = 4; 

查看

<%= Html.DropDownList("personId", ViewData["personSelectList"] as SelectList) %> 
+1

嘗試此操作...不起作用。非常令人沮喪,因爲它絕對應該是解決方案。 – 2012-08-09 14:18:02

0

SelectListItem.Value是一個string,但你傳遞的是4 - 這是一個整數。嘗試通過"4"來代替。

0

我只是寫測試使用MVC3和它的作品沒有任何問題:

@{ 
var items = new[] 
       { 
        new Test {Id = 1, Name = "Jhon"}, 
        new Test {Id = 2, Name = "Scott"} 
       }; 

var selectList = new SelectList(items, "Id", "Name", 2); 
var selectEnumerable = items.Select(x => new SelectListItem 
              { 
               Selected = x.Id == 2, 
               Text = x.Name, 
               Value = x.Id.ToString() 
              }); 
} 

@Html.DropDownList("name", selectList) 
@Html.DropDownList("name2", selectEnumerable) 

在兩個DropDownLists選擇的值是斯科特,所以它寫在代碼不會選擇第二項。

1
items = new List<SelectListItem>(); 

foreach (Person person in personList) 
{ 
    items.Add(new SelectListItem() 
    { 
     Value = person.Id, 
     Text = person.FirstName + " " + person.LastName, 
     Selected = person.Id == 4 
    }); 
} 

ViewData["personSelectList"] = items 

然後查看

@Html.DropDownList("holdPersonSelectList", (List<SelectListItem>)ViewData["personSelectList") 

然後回到控制器

public ActionResult Index(string holdPersonSelectList) 

編輯: holdPersonSelectList中,控制器將保持所選擇的項目的值的字符串值。 所以,如果它是一個id字段,只需解析爲int。

如果你想要設置一個值,我會傳入一個不同的視圖數據保存該數字,並使用jquery // javascript進行設置。

$('holdPersonSelectList').val('4'); 
+0

在MVC 3+中不適用於我 – 2013-06-06 01:11:15

0

我的解決方案是不同的。我不得不改變SelectListMultiSelectList

所以,與其做的foreach,我像做

int[] personListSelected= personList.Select(p=>(int)p.idPerson).ToArray(); 

IEnumerable<SelectListItem> personList = new MultiSelectList(personList, "idPerson", "namePerson",personListSelected); 
[ASP.NET MVC Html.DropDownList的SelectedValue(的