我在控制器中有以下代码:
public static IEnumerable<SelectListItem> EventStatus = new[] {
new SelectListItem{ Text=Active, Value=Active},
new SelectListItem{ Text=CheckedIn, Value=CheckedIn},
new SelectListItem{ Text=Inactive, Value=Inactive}
};
ViewData["EventStatus"] = EventStatus;
我正在尝试迭代.aspx文件中的foreach循环并将值绑定到SelectList。
<% foreach (var item in Model) { %>
....
<%= Html.DropDownList("item.Status", ViewData["EventStatus"] as SelectList)%>
...
这不起作用。我得到了:
没有带键的ViewData项 'item.Status'的类型 '的IEnumerable'。
但<%= Html.Encode(item.Status) %>
有效。
我也试过这个:
<%= Html.DropDownList("item.Status", (IEnumerable<SelectListItem>)ViewData["EventStatus"])%>
显示列表,但未选择任何内容(不发生绑定)。
有人有任何建议吗?
干杯,
迪安
答案 0 :(得分:1)
您不必循环将项目绑定到DropDownList或ListBox之类的控件就可以执行此操作
<%= Html.DropDownList("ControlName", ViewData["EventStatus"] as IEnumerable<SelectListItem>)%>
用于DropDownList并且像这样
<%= Html.ListBox("ControlName", ViewData["EventStatus"] as IEnumerable<SelectListItem>)%>
for ListBox
答案 1 :(得分:1)
我建议您使用视图模型而不是ViewData。这样您的视图将被强类型化。例如,您可以使用以下视图模型:
public class MyViewModel
{
public string Status { get; set; }
public IEnumerable<SelectListItem> EventStatuses
{
get
{
return new SelectList(new[]
{
new SelectListItem{ Text = Active, Value = Active },
new SelectListItem{ Text = CheckedIn, Value = CheckedIn },
new SelectListItem{ Text = Inactive, Value = Inactive }
}, "Value", "Text");
}
}
}
然后在你的控制器中:
public class HomeController: Controller
{
public ActionResult Index()
{
return View(new MyViewModel());
}
[HttpPost]
public ActionResult Index(MyViewModel model)
{
// TODO: Do something with the selected model.Status
return View(model);
}
}
最后是强类型视图:
<% using (Html.BeginForm()) { %>
<%= Html.DropDownListFor(x => x.Status, Model.EventStatuses) %>
<input type="submit" value="OK" />
<% } %>
答案 2 :(得分:0)
你可以发布更多的控制器吗?您展示的内容不会构建,是实际来源还是您输入?
当视图执行时看起来像ViewData [“EventStatus”]为null。如果你把:
<%= ViewData["EventStatus"] == null %>
在你看来是真的还是假的?
来自Mvc2 Source(SelectExtensions.SelectInternal):
if (selectList == null) {
selectList = htmlHelper.GetSelectData(name);
usedViewData = true;
}
selectList是传入的列表。正如您所看到的,它是否为null,它会尝试使用“name”(在本例中为“item.Status”)从视图数据中获取值。