我有一个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没有加载的任何想法?
答案 0 :(得分: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
是没有意义的,因为在您的观看中,您使用SiteName
和ICAO
等属性构成了您的模型。也许这是一个复制粘贴错误...