首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我收到一个错误:“没有'IEnumerable<SelectListItem>‘类型的ViewData项

我收到一个错误:“没有'IEnumerable<SelectListItem>‘类型的ViewData项
EN

Stack Overflow用户
提问于 2011-09-19 22:46:34
回答 2查看 3K关注 0票数 1

我得到了一个错误:“没有'IEnumerable‘类型的时区项目具有’ViewData‘键”。

视图

代码语言:javascript
代码运行次数:0
运行
复制
        <%@ 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")%>

控制器

代码语言:javascript
代码运行次数:0
运行
复制
ViewData["TIMEZONE"] = new SelectList(EventModel.getTIMEZOMES, "Key", "Value");
return View();

模型页面

代码语言:javascript
代码运行次数:0
运行
复制
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;
            }
        }

请给出解决方案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-19 22:53:31

一个可能的原因是,在控制器中,您可能没有将数据放入ViewData["TimeZone"]。试着调试它,看看你得到了什么。

票数 1
EN

Stack Overflow用户

发布于 2011-09-19 22:50:50

不应使用相同的属性将dropdownlist绑定到和selectlist。它们应该是不同的。第一个参数必须表示一个标量属性,该属性将用作生成的select的名称。第二个参数必须是列表:

代码语言:javascript
代码运行次数:0
运行
复制
<%= Html.DropDownList(
    "SelectedTimeZone", 
    (IEnumerable<SelectListItem>)ViewData["TIMEZONE"], 
    "Select Timezone"
) %>

这将使用ViewData["TIMEZONE"]中包含的集合生成select,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
<select name="SelectedTimeZone">
    <option value="1">zone 1</option>
    ...
</select>

提交表单时,您将在请求中查找SelectedTimeZone属性,以获取相应的选定值。

这就是说,我注意到你的视图是强类型的某个模型:

代码语言:javascript
代码运行次数:0
运行
复制
Inherits="System.Web.Mvc.ViewPage<EventListing.Models.EventInfo>"

但在返回此视图时,您没有传递任何模型:

代码语言:javascript
代码运行次数:0
运行
复制
ViewData["TIMEZONE"] = new SelectList(EventModel.getTIMEZOMES, "Key", "Value");
return View(); // <!-- where is the Model???

因此,我建议您使用视图模型:

代码语言:javascript
代码运行次数:0
运行
复制
public class MyViewModel
{
    public SelectList TimeZones { get; set; }
    public string SelectedTimeZone { get; set; }

    // ... include some other properties that might be
    // needed by this view
}

然后让您的控制器操作填充此视图模型:

代码语言:javascript
代码运行次数:0
运行
复制
public ActionResult Index()
{
    var model = new MyViewModel
    {
        TimeZones = new SelectList(EventModel.getTIMEZOMES, "Key", "Value")
    };
    return View(model);
}

最后,在你的强类型视图中使用一个强类型的DropDownListFor助手:

代码语言:javascript
代码运行次数:0
运行
复制
<%@ 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"
) %>
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7472752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档