您不应使用相同的属性将下拉列表绑定到选择列表。它们应该是不同的。第一个参数必须表示一个标量属性,它将用作生成的选择的名称。第二个参数必须是列表:
<%= Html.DropDownList(
"SelectedTimeZone",
(IEnumerable<SelectListItem>)ViewData["TIMEZONE"],
"Select Timezone"
) %>
这将使用包含在ViewData["TIMEZONE"]
像这样生成选择:
<select name="SelectedTimeZone">
<option value="1">zone 1</option>
...
</select>
提交表格后,您将查找SelectedTimeZone
请求中的属性来获取相应的选定值。
话虽如此,我注意到您的视图是强类型化到某个模型的:
Inherits="System.Web.Mvc.ViewPage<EventListing.Models.EventInfo>"
但返回此视图时您没有传递任何模型:
ViewData["TIMEZONE"] = new SelectList(EventModel.getTIMEZOMES, "Key", "Value");
return View(); // <!-- where is the Model???
所以我建议你使用视图模型:
public class MyViewModel
{
public SelectList TimeZones { get; set; }
public string SelectedTimeZone { get; set; }
// ... include some other properties that might be
// needed by this view
}
然后让您的控制器操作填充此视图模型:
public ActionResult Index()
{
var model = new MyViewModel
{
TimeZones = new SelectList(EventModel.getTIMEZOMES, "Key", "Value")
};
return View(model);
}
最后在强类型视图中使用强类型 DropDownListFor 帮助器:
<%@ Page
Title=""
Language="C#"
MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<EventListing.Models.MyViewModel>"
%>
<%= Html.DropDownListFor(
x => x.SelectedTimeZone,
Model.TimeZones,
"Select Timezone"
) %>