使用Html.DropDownListFor()w / o使用Model

时间:2011-12-05 17:11:28

标签: asp.net-mvc razor html.dropdownlistfor

我将模型传递到我的视图(.net mvc 3)中,该视图不能包含我想用来填充下拉列表的信息。

我从未使用过Html.DropDownListFor(),但总是使用Html.DropDownList()。我想在我的技巧包中添加另一个工具,因此想要尝试合并Html.DropDownListFor()。

是否可以将此助手与ViewBag变量中设置的键/值对一起使用?

请注意,任何代码示例都会受到高度赞赏(前端(剃须刀)和后端(控制器上))。

TIA

1 个答案:

答案 0 :(得分:1)

  

是否可以将此助手与ViewBag变量中设置的键/值对一起使用?

绝对不是。如果要使用强类型帮助程序(如Html.DropDownList),则需要视图模型。由于我总是建议使用视图模型,这是一个例子:

public class MyViewModel
{
    public string SelectedId { get; set; }
    public IEnumerable<SelectListItem> Items { get; set; }
}

正如您在此示例视图模型中所看到的,对于每个下拉列表,您需要2个属性:一个将保存所选值的标量属性和一个SelectListItem集合,其中包含每个选项包含一个选项的选项价值和文字。

然后控制器负责初始化此视图模型并将其传递给视图:

public ActionResult Index()
{
    var model = new MyViewModel();
    // normally those values will be dynamic. They will be mapped 
    // to the view model
    model.Items = new[]
    {
        new SelectListItem { Value = "1", Text = "item 1" },
        new SelectListItem { Value = "2", Text = "item 2" },
        new SelectListItem { Value = "3", Text = "item 3" },
    };
    return View(model);
}

然后你将对这个视图模型有一个相应的强类型视图,你可以在其中使用强类型版本的帮助器:

@model MyViewModel
@Html.DropDownListFor(x => x.SelectedId, Model.Items)

您问题中的以下句子值得关注:

  

我将模型传递到我的视图(.net mvc 3)中,但不能包含   我想用来填充下拉列表的信息。

您不应该将模型传递给视图。你应该传递一个视图模型。视图模型是您为每个视图专门定义的类。它将包含此视图所需的必要信息。因此,单个视图模型可以由多个模型组成,因为这是您视图的要求。