0

在 Grid.Mvc 方面需要帮助。我正在传递IQueryable由实体框架生成的集合并获得异常

动作方法:

public ActionResult Index(int id)
{
        IQueryable<Document> documents = _dbContext.Document;

        var model = new DocumentListViewModel()
        {                Documents = documents
        };

        return View(model);
}

文档列表视图模型:

public class DocumentListViewModel
{
    public IQueryable<Document> Documents { get; set; }
}

看法:

@model CompanyName.DocFlow.Web2.Models.DocumentListViewModel
@using GridMvc.Html;

@Html.Grid(Model.Documents).Columns(columns =>
                {
                    columns.Add(x => x.CreatedDate).Titled("Дата");//.Filterable(true);
                    columns.Add(x => x.IncomingNumber).Titled("Входящий номер");//.Filterable(true);
                    columns.Add(x => x.Description).Titled("Краткое описание");
                }).WithPaging(10)

例外:

EntityFramework.SqlServer.dll 中出现“System.NotSupportedException”类型的异常,但未在用户代码中处理

附加信息:仅 LINQ to Entities 中的排序输入支持“跳过”方法。必须在方法“Skip”之前调用方法“OrderBy”。

该文档指出:

如果您的数据源是数据库(例如),您需要将 IQueryable 集合传递给网格。Grid.Mvc 使用 IQueryable 接口为您的数据集合构造查询表达式。

当您转到某个页面时,网格会调用 .Skip(N).Take(N) 方法,当您对数据进行排序时,网格会调用 OrderBy 或 OrderByDescending 方法等。

教程链接:Grid.Mvc

4

1 回答 1

2

MVC 网格描述:

当您转到某个页面时,网格会调用 .Skip(N).Take(N) 方法,当您对数据进行排序时,网格会调用 OrderBy 或 OrderByDescending 方法等。

您可以执行排序过程封装字段 get 方法,也可以在 ActionResult 方法中执行相同的操作

示例代码:

public class DocumentListViewModel
{
    private IQueryable<Document> _Documents;
    public  IQueryable<Document> Documents 
   { 
     get 
     { 
        return _Documents.Ordery(x=>x.Id);
     } 
     set 
     { 
        _Documnets = value;
     } 
   }
}

或者

public ActionResult Index(int id)
{
        IQueryable<Document> documents = _dbContext.Document.OrderBy(x=>x.Id);

        var model = new DocumentListViewModel()
        {             
            Documents = documents
        };

        return View(model);
}
于 2016-09-06T06:19:49.910 回答