我想消费
Northwind
ASP.NET MVC项目中的OData服务,并使用WebGrid控件进行可视化。我使用服务URL使用Visual Studio 2012创建服务引用。问题在于WebGrid的排序。当我尝试在导航字段(如CategoryName)上对其进行排序时,我收到一个错误:“类型'Product'中不存在'CategoryName'属性或字段”。我理解错误,但我不知道如何使其工作并获得所需的部分数据。如有任何帮助,我们将不胜感激。
控制器:
private ODataNorthwind.NorthwindEntities context = new ODataNorthwind.NorthwindEntities(new Uri("http://services.odata.org/Northwind/Northwind.svc"));
public ActionResult WebGrid(int page = 1, int rowsPerPage = 10, string sort = "ProductID", string sortDir = "ASC")
{
var data = GetProducts(page, rowsPerPage, sort, sortDir);
return View(data);
}
private WebGridViewModel GetProducts(int page = 1, int rowsPerPage = 10, string sort = "ProductID", string sortDir = "ASC")
{
var query = context.Products.OrderBy(sort + " " + sortDir)
.Select(p => new
{
p.ProductID,
p.ProductName,
p.Category.CategoryName,
p.Supplier.CompanyName,
p.Supplier.Country
});
WebGridViewModel model = new WebGridViewModel
{
TotalRows = query.Count(),
Products = query.Skip((page - 1) * rowsPerPage).Take(rowsPerPage).ToList().Select(p =>
new HtmlViewModel
{
ProductId = p.ProductID,
ProductName = p.ProductName,
CategoryName = p.CategoryName,
CompanyName = p.CompanyName,
Country = p.Country
})
};
return model;
}
视图:
@{
ViewBag.Title = "WebGrid";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>OData WebGrid</h2>
<div>
@{
var grid = new WebGrid(null, defaultSort: "ProductId");
grid.Bind(Model.Products, rowCount: Model.TotalRows, autoSortAndPage: false);
}
@grid.GetHtml(columns: grid.Columns(
grid.Column("ProductId"),
grid.Column("ProductName"),
grid.Column("CategoryName"),
grid.Column("CompanyName"),
grid.Column("Country")
))
</div>