MVC SelectList无法正常工作

时间:2009-06-28 15:25:17

标签: asp.net-mvc

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;

然后将其与

一起使用
Html.DropDownList("OrderTypeList") 

呈现

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

为什么它没有正确渲染选项?

5 个答案:

答案 0 :(得分:7)

执行时调用的构造函数方法:

SelectList selectList = new SelectList(items);

创建一组SelectListItems,它们本身指向SelectListItems(因此它是奇怪的选项,因为它只是在对象上调用ToString)。而是直接将列表设置为ViewData键

ViewData["OrderTypeList"] = items;

答案 1 :(得分:7)

你也可以简单地改变一行:

SelectList selectList = new SelectList(items);

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

这将指示MVC将哪些属性用作选项标记中的TextValue

答案 2 :(得分: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" })%>

答案 3 :(得分:1)

如果您查看SelectList构造函数重载的Intellisense,代码SelectList(items)应该可以工作,但不能。据我所知,它只是对项目执行ToString()这一事实是微软应该修复的错误。答案都是很好的解决方法。顺便说一句,如果你使用提供“文本”和“值”的方法,正确的答案应该是

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


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

至少,这与我在MVC 3中的实验一致。

答案 4 :(得分:0)

我认为您应该尝试使用

进行渲染
Html.DropDownList("OrderTypeList", ViewData["OrderTypeList"])