0

我有一个 JQuery Mobile 应用程序,我正在尝试创建一个填充下拉列表的视图。我在控制器中创建模型的 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 是使用实体框架创建的,顺便说一句。我还检查以确保“站点”列表正在被填充,并且确实如此。

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

4

1 回答 1

0

在您看来,您将模型定义为:

@model IEnumerable<Models.Site>

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

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

IEnumerable<SelectListItem>并非IEnumerable<Models.Site>如此,它会引发异常,并且您会从 Jquery Mobile 获得错误。

要解决它,您需要IEnumerable<Models.Site>从您的操作中返回。只需删除整个Select部分,它应该可以工作:

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

无论如何,将站点转换为没有任何意义,SelectListItem因为在您的视图中,您使用了类似SiteNameICAO形成模型的属性。也许这是一个复制粘贴错误......

于 2013-01-10T16:19:06.173 回答