2009-06-28 70 views
6
List<SelectListItem> items = new List<SelectListItem>(); 
if (a) 
{ 
    SelectListItem deliveryItem = new SelectListItem() 
    { 
     Selected = a.selected, 
     Text = "Delivery", 
     Value = "1" 
    }; 

    items.Add(deliveryItem); 
} 

if (b) 
{ 
    SelectListItem pickupItem = new SelectListItem() 
    { 
     Selected = b.selected, 
     Text = "Pickup", 
     Value = "2" 
    }; 

    items.Add(pickupItem); 
} 

SelectList selectList = new SelectList(items); 

ViewData["OrderTypeList"] = selectList; 

然後使用它與MVC的SelectList不工作​​

Html.DropDownList("OrderTypeList") 

呈現

<select id="OrderTypeList" name="OrderTypeList"><option>System.Web.Mvc.SelectListItem</option> 
<option>System.Web.Mvc.SelectListItem</option> 
</select> 

爲什麼它沒有渲染選項正確?

回答

7

的構造方法要調用渲染當你這樣做:

SelectList selectList = new SelectList(items); 

創建一組自己指向SelectListItems SelectListItems(中因此怪異因爲它只是在對象上調用ToString)。而是直接將您的列表設置爲ViewData密鑰

ViewData["OrderTypeList"] = items; 
+0

謝謝,它解決了這個問題 – mamu 2009-06-28 15:53:43

0

我想你應該嘗試與

Html.DropDownList("OrderTypeList", ViewData["OrderTypeList"]) 
+0

我想我可以使用,如果我有viewdata selectlist。但在這裏我試圖建立selectlist – mamu 2009-06-28 15:41:41

1

或者您可以創建一個類來保存選擇列表,然後將該類作爲視圖模型返回。我認爲這是一種更優雅的方式,而不是ViewData。

public class MyFormViewModel 
{ 
    public SelectList Friends { get; set; } 
} 
在你的ActionResult

MyFormViewModel fvm = new MyFormViewModel(); 
fvm.Friends = new SelectList(myList, "UserName", "NickName"); 

然後在您的視圖

然後

<%= Html.DropDownList("ToUserName", Model.Friends, new { @class = "field" })%> 
7

你可以有也只是改變了一個專線:

SelectList selectList = new SelectList(items); 

SelectList selectList = new SelectList(items, "Text", "Value"); 

這將指示MVC哪些屬性在您的選項標籤中用作TextValue

1

如果您查看SelectList構造函數重載的Intellisense,則代碼SelectList(items)應該可以工作,但不會。事實上,它只是對項目做一個ToString(),據我所知,這是微軟應該修復的一個錯誤。答案都是很好的解決方法。順便說一句,如果你使用的方法提供「文本」和「價值」,正確的答案應該是

SelectList selectList = new SelectList(items, "Value", "Text") 


SelectList selectList = new SelectList(items, "Text", "Value") 

至少,這與我在MVC 3實驗一致。