将Kendo Grid限制为当前路径ID

时间:2014-04-23 18:51:46

标签: kendo-ui kendo-grid asp.net-mvc-5 kendo-asp.net-mvc

我正在尝试在我的MVC应用程序的“编辑”页面上包含一个Kendo UI ASP.NET MVC网格,我想将该网格限制为仅返回当前路由ID中的值。我一直在研究如何做到这一点,但找不到任何我需要的东西,或者我在这方面太新了以连接点。

到目前为止,我的想法是将过滤器应用于DataSource或将参数发送到控制器并让它限制DataSourceResult。

对于视图中的DataSource过滤器,我可以这样做:

.Filter(filters => { filters.Add(d => d.CompanyId).IsEqualTo(2); })

但我无法弄清楚如何用来自@ ViewContext.RouteData.Values [“id”]或其他东西的值替换硬编码的2。

将参数传递给控制器​​,我可以得到以下内容:

public ActionResult Divisions_Read([DataSourceRequest]DataSourceRequest request, int id)
{
    using (var db = new AppContext())
    {
        IQueryable<Division> divisions = db.Divisions;
        DataSourceResult result = divisions.ToDataSourceResult(request, division => new DivisionViewModel
        {
            DivisionId = division.DivisionId,
            CompanyId = division.CompanyId,
            CountryId = division.CountryId,
            DivisionName = division.DivisionName
        });
        return Json(result);
    }
}

但我不知道如何使用该ID基本上为结果添加“where CompanyId = Id”语句。

关于最好的方法是什么的任何想法?我错过了一些非常明显的东西吗?

谢谢!

ETA:根据mmillican和我研究中的其他地方的建议,通过Read操作将参数传递给Controller,并更改

DataSourceResult result = divisions.ToDataSourceResult(request, division => new DivisionViewModel

DataSourceResult result = divisions.Where(c => c.CompanyId == companyId).ToDataSourceResult(request, division => new DivisionViewModel

做了这个伎俩。控制器中的额外位是我正在寻找的,但似乎无法找到任何地方。

1 个答案:

答案 0 :(得分:0)

假设您的网页模型如下所示:

public class MyViewModel
{
    public int Id { get; set; } // assuming Id is what you want to filter by

    // .. other VM properties
}

您可以在网格数据绑定中执行类似的操作

.DataSource(ds => ds
    .Ajax()
    .Model(mdl => mdl.Id(x => x.Id))
    .Read("Divisions_Read", "Divisions", new { id = Model.Id })
)
在控制器中,您可以将模型的Id属性设置为路径中的任何ID。