我得到了一个错误:“没有'IEnumerable‘类型的时区项目具有’ViewData‘键”。
视图
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<EventListing.Models.EventInfo>" %>
<%= Html.DropDownList("TIMEZONE", (IEnumerable<SelectListItem>)ViewData["TIMEZONE"], "Select Timezone")%>
控制器
ViewData["TIMEZONE"] = new SelectList(EventModel.getTIMEZOMES, "Key", "Value");
return View();
模型页面
public static IList<KeyValuePair<string, string>> getTIMEZOMES
{
get
{
Dbhelper DbHelper = new Dbhelper();
IList<KeyValuePair<String, String>> Timezone = new List<KeyValuePair<String, String>>();
DbCommand cmd = DbHelper.GetSqlStringCommond("SELECT * FROM TMP_TIMEZONES");
DbDataReader Datareader = DbHelper.ExecuteReader(cmd);
while (Datareader.Read())
{
Timezone.Add(new KeyValuePair<String, String>(Datareader["ABBR"].ToString(), Datareader["NAME"].ToString()));
}
return Timezone;
}
}
请给出解决方案。
发布于 2011-09-19 14:53:31
一个可能的原因是,在控制器中,您可能没有将数据放入ViewData["TimeZone"]
。试着调试它,看看你得到了什么。
发布于 2011-09-19 14:50:50
不应使用相同的属性将dropdownlist绑定到和selectlist。它们应该是不同的。第一个参数必须表示一个标量属性,该属性将用作生成的select的名称。第二个参数必须是列表:
<%= Html.DropDownList(
"SelectedTimeZone",
(IEnumerable<SelectListItem>)ViewData["TIMEZONE"],
"Select Timezone"
) %>
这将使用ViewData["TIMEZONE"]
中包含的集合生成select,如下所示:
<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"
) %>
https://stackoverflow.com/questions/7472752
复制相似问题