MvcContrib Grid показывает ошибку при сортировке таблицы заказов Northwind

Я изучаю MVC 3, сетку MvcContrib, и когда я попытался создать представление, используя сетку с параметрами сортировки и разбиения на страницы, я получил ошибку. "Не удалось найти свойство под названием "Customer.CompanyName" для типа MvcApplication5.Models.Order" в этой строке

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 }));    
})

person Builder    schedule 14.09.2013    source источник
comment
Я нашел еще один хороший пост, и вот ссылка stackoverflow.com/questions/6581164/ QF   -  person Builder    schedule 17.09.2013


Ответы (1)


Что ж, я до сих пор не вижу ответа на свой вопрос, но, просматривая Интернет, я нашел эту ссылку как-то полезной, и даже это не решение моей проблемы, но все же ее можно использовать.

Разбиение по страницам/сортировка/фильтрация ASP.NET MVC с использованием сетки и пейджера MVCContrib

Здесь он использует модифицированный класс продукта со столбцом «Название категории». Таким образом, вместо заполнения продукта непосредственно из таблицы, заполнения структуры представления продукта из названия продукта и категории, а затем отображения его поля в сетке. Таким образом, когда пользователь нажимает на название категории, которое не является прямым полем таблицы продуктов, его можно отсортировать и отфильтровать таким образом.

Но все же нужно знать, можем ли мы отсортировать ссылочный столбец с помощью этого решения, как мы это делаем для прямого столбца.

QF

person Builder    schedule 15.09.2013