0

我想在 APS.NET MVC 中使用带有过滤器选项的 Kendo UI 网格。

在我的示例中,我使用数据库作为数据源和学生表

当我使用学生类作为

public ActionResult Index()
    {
        var std = (from p in db.Students
                select p).ToList();
        return View("Student", std);
    }

一切都好。

但是当我想使用 ViewModel 作为数据源时,在运行时当我点击过滤器图标过滤器窗口打开但我在过滤器的下拉列表中看不到任何内容。

我使用自动映射器和值注入器。

有什么建议可以解决这个问题吗?

附加

个人控制器.cs

public class PersonController : Controller
{

    Adventureworks2012DataContext db = new Adventureworks2012DataContext();

    public ActionResult Index()
    {
        /*var prs = (from p in db.Person
                   select p).ToList();*/
        return View(GetPersonViewModel());
    }

    public ActionResult PersonViewModel_Read([DataSourceRequest]DataSourceRequest request)
    {
        return Json(GetPersonViewModel().ToDataSourceResult(request));
    }

    private  IList<PersonViewModel> GetPersonViewModel()
    {
        return db.Person.Project().To<PersonViewModel>().ToList();
    }    
}

索引.cshtml

@model IList<DevartLinqTestMVC.ViewModel.PersonViewModel>
@{
ViewBag.Title = "Person List";}

<br />
@(Html.Kendo().Grid(Model)
    .Name("Grid")
    .Columns(columns =>
    {
        columns.Bound(p => p.Businessentityid);
        columns.Bound(p => p.Persontype);
        columns.Bound(p => p.Namestyle);
        columns.Bound(p => p.Title);
        columns.Bound(p => p.Firstname);
        columns.Bound(p => p.Middlename);
        columns.Bound(p => p.Lastname);
        columns.Bound(p => p.Emailpromotion);
    })
    .Groupable()
    .Pageable()
    .Sortable()
    .Scrollable()
    .Filterable()
    .Selectable()
    .DataSource(dataSource => dataSource
                                    .Ajax()
                                    .Model(m => m.Id(s => s.Businessentityid))
                                    .PageSize(20)
                                    .Read(read => read.Action("PersonViewModel_Read", "Person")))
)

一切都很好,ajax也可以完美运行

但是过滤器下拉列表在哪里?!!!

4

1 回答 1

1

如果您在视图中传递一个列表,它只适用于您想要一个加载一次的静态列表。如果您想要服务器端分页或工具栏,则需要使用返回 JSON 对象的服务器端函数加载数据,并使用 .Read() 将其链接到您的网格。

例如,在您的控制器中(代码未测试):

    public ActionResult StudentGrid_Read([DataSourceRequest] DataSourceRequest request)
    {
        return Json((from p in db.Students select p).ToDataSourceResult(request));
    }

在你的网格上:

@(Html.Kendo()
    .[other stuff]
    .DataSource(dataSource => dataSource
        .[other stuff]
        .Read("StudentGrid_Read", "Controller")
    )
)

有关完整的编码示例,请参阅带有工具栏演示的 kendo ui 网格:http ://demos.kendoui.c​​om/web/grid/toolbar-template.html

编辑:刚刚注意到还有一个过滤演示,但想法是一样的: http ://demos.kendoui.c​​om/web/grid/filter-menu-customization.html

于 2013-06-07T09:22:20.620 回答