我正在尝试在我的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
做了这个伎俩。控制器中的额外位是我正在寻找的,但似乎无法找到任何地方。
答案 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。