我将模型传递到我的视图(.net mvc 3)中,该视图不能包含我想用来填充下拉列表的信息。
我从未使用过Html.DropDownListFor(),但总是使用Html.DropDownList()。我想在我的技巧包中添加另一个工具,因此想要尝试合并Html.DropDownListFor()。
是否可以将此助手与ViewBag变量中设置的键/值对一起使用?
请注意,任何代码示例都会受到高度赞赏(前端(剃须刀)和后端(控制器上))。
TIA
答案 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)中,但不能包含 我想用来填充下拉列表的信息。
您不应该将模型传递给视图。你应该传递一个视图模型。视图模型是您为每个视图专门定义的类。它将包含此视图所需的必要信息。因此,单个视图模型可以由多个模型组成,因为这是您视图的要求。