【问题标题】:Restrict Kendo Grid to Current Route Id将 Kendo Grid 限制为当前路线 ID
【发布时间】:2023-04-09 23:45:02
【问题描述】:

我正在尝试在我的 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 操作将参数传递给控制器​​,并进行更改

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

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

成功了。控制器中的那个额外部分是我一直在寻找的,但似乎在任何地方都找不到。

【问题讨论】:

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


    【解决方案1】:

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

    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。

    【讨论】:

    • 我想出了一个使用过滤器的解决方法,但是通过读取操作将参数传递给控制器​​是一个更好的解决方案,因为它不会向视图返回额外的数据。我已经更新了我上面的问题,对控制器进行了最终更改,使其工作。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2019-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多