Html.DropDownList仅使用ViewBag for selectedvalue

时间:2012-04-26 08:48:42

标签: asp.net-mvc

我可以使用ViewBag中的项目创建下拉列表,但似乎没有办法选择当前项目。我没有使用模型来实现这一点,只是想使用ViewBag,否则我必须创建另一个模型类来包装选择项和要显示的实际数据。

我的代码:

@Html.DropDownList("MyFilter", (IEnumerable<SelectListItem>)ViewBag.SelectItems, "Show All" )

没有参数可以设置选择列表的值。我忽略了什么吗? 如果我要使用DropDownListFor&lt;&gt;这只会对模型起作用吗?

1 个答案:

答案 0 :(得分:2)

您可以尝试在MyFilter中设置ViewBag/ViewData媒体资源:

public ActionResult Index()
{
    ViewBag.SelectItems = new[]
    {
        new SelectListItem { Value = "1", Text = "item 1" },
        new SelectListItem { Value = "2", Text = "item 2" },
        new SelectListItem { Value = "3", Text = "item 3" },
    };

    // preselect the second item
    ViewBag.MyFilter = "2";

    return View();
}

但我的建议是使用视图模型和帮助程序的强类型版本:

public ActionResult Index()
{
    var model = new MyViewModel
    {
        SelectItems = new[]
        {
            new SelectListItem { Value = "1", Text = "item 1" },
            new SelectListItem { Value = "2", Text = "item 2" },
            new SelectListItem { Value = "3", Text = "item 3" },
        },
        // preselect the second item
        MyFilter = "2"
    };
    return View(model);
}

并在您的强类型视图中:

@model MyViewModel
...
@Html.DropDownListFor(x => x.MyFilter, Model.SelectItems, "Show all")