模型传递给它时查看未加载

时间:2013-01-10 16:09:09

标签: asp.net-mvc-3

我有一个JQuery Mobile应用程序,我正在尝试创建一个填充下拉列表的View。我在控制器中创建模型的IEnumerable列表,然后将其传递给视图。视图永远不会呈现,只是说“错误加载页面”(来自我认为的J-Query)。我甚至在Layout =行的视图顶部放置了一个断点,但它没有到达那里。

这是我的控制器:

    public virtual ActionResult List()
    {
        string customerCode = RouteData.Values["id"].ToString();

        var csdDB = new DBContext(customerCode);

        // Return all locations
        IEnumerable<SelectListItem> sites = csdDB.Sites
                              .OrderBy(o => o.SiteName)
                              .AsEnumerable()
                              .Select(s => new SelectListItem
                              {
                                  Text = s.SiteName,
                                  Value = s.SiteID.ToString()
                              });

        return View(sites);
    }

以下是观点:

@{
ViewBag.Title = "Site";
Layout = "~/Views/Shared/_Layout.cshtml";
}

@model IEnumerable<Models.Site>

<div data-role="content">
    <ul data-role="listview" data-divider-theme="b" data-inset="true">
        <li data-role="list-divider" role="heading">
            Locations
        </li>
        @foreach(var site in Model)
        { 
        <li data-theme="c">
            <a href="~/Site/SiteMenu/@site.SiteID" data-transition="slide">
                @site.SiteName - (@site.ICAO)
            </a>
        </li>
       }
    </ul>
</div>

此页面从上一页调用,如下所示:

            <li data-theme="c">
            @Html.ActionLink("Sites by HTML.ActionLink", "List", "Site", new { id = @ViewBag.CustomerCode }, new
            {

                data_native_menu = "false",
                name = "",
                data_theme = "c"
            })
        </li>

DBContext是使用Entity Framework,btw创建的。我还检查了确保列表“sites”正在填充,它是。

关于为什么View没有加载的任何想法?

1 个答案:

答案 0 :(得分:0)

在您的视图中,您将模型定义为:

@model IEnumerable<Models.Site>

但是在你的控制器中你会返回

IEnumerable<SelectListItem> sites = ...
return View(sites);

但是IEnumerable<SelectListItem>不是IEnumerable<Models.Site>所以它会引发异常而你从Jq​​uery Mobile得到错误。

要解决此问题,您需要从操作中返回IEnumerable<Models.Site>。只需删除整个Select部分就可以了:

IEnumerable<Site> sites = csdDB.Sites
                          .OrderBy(o => o.SiteName)
                          .AsEnumerable();
return View(sites);

无论如何,将网站转换为SelectListItem是没有意义的,因为在您的观看中,您使用SiteNameICAO等属性构成了您的模型。也许这是一个复制粘贴错误...