我正在学习MVC 3,MvcContrib网格,当尝试使用带有排序和分页选项的网格创建视图时,我收到了错误。 “无法在MvcApplication5.Models.Order类型上找到名为'Customer.CompanyName'的属性” 在这一行
orders = orders.OrderBy(sort.Column, sort.Direction);
请告诉我,由于Customer表的代码工作正常可能只是一个表而Order表查询包含3个表,这是错误的吗?
控制器代码在
之下public ActionResult Index(GridSortOptions sort, int? page)
{
IEnumerable<Order> orders = db.Orders.Include(o => o.Customer).Include(o => o.Employee).Include(o => o.Shipper);
if (sort.Column != null)
{
orders = orders.OrderBy(sort.Column, sort.Direction);
}
//orders = orders.AsPagination(page ?? 1, 25);
ViewData["sort"] = sort;
return View(orders);
}
查看代码在这里
@model IEnumerable<MvcApplication5.Models.Order>
@using MvcContrib.UI.Grid;
@using MvcContrib.UI.Pager;
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
@Html.Grid(Model).Sort((GridSortOptions)ViewData["sort"]).Columns(col => {
col.For(o => o.Customer.CompanyName).Named("Customer").Sortable(true).SortColumnName("Customer.CompanyName");
col.For(o => o.Employee.LastName).Named("Employee");
col.For(o => o.OrderDate).Named("Order Date");
col.For(o => o.RequiredDate).Named("Required Date");
col.For(o => o.ShippedDate).Named("Shipped Date");
col.For(o => o.Shipper.CompanyName).Named("Shipper");
col.For(o => o.Freight).Named("Frieght");
col.For(o => o.ShipName).Named("Ship Name");
col.For(o => o.ShipAddress).Named("Ship Address");
col.For(o => o.ShipCountry).Named("Ship Country");
col.For(o => @Html.ActionLink("Edit", "Edit", new { id = o.OrderID }));
col.For(o => @Html.ActionLink("Details", "Details", new { id = o.OrderID }));
col.For(o => @Html.ActionLink("Delete", "Delete", new { id = o.OrderID }));
})
答案 0 :(得分:0)
好吧我还没有看到我的问题的任何答案,但是在查看网页时,我发现这个链接在某种程度上有用,甚至它不能解决我的问题,但仍然可以使用。
ASP.NET MVC Paging/Sorting/Filtering using the MVCContrib Grid and Pager
他在这里使用了一个带有Category Name列的修改过的产品类。因此,直接从表中填充产品,从产品和类别名称填充productview结构,然后在网格中显示其字段。因此,当用户点击不是产品表的直接字段的类别名称时,可以使用这种方式对其进行排序和过滤。
但是仍然需要知道我们是否可以像使用直接列那样使用此解决方案对参考列进行排序。
QF