我的Web应用程序中有两个页面。其中有一个具有几种不同状态的项目的流程图。另一个是剑道网格。当用户单击流程图上的状态时,我想将他们带到带有预先过滤的网格的Kendo网格中。
我目前认为最好的方法是在.DataSource上进行过滤,但是据我所知,我只能使用硬编码字符串来过滤状态。我希望能够传递一个等于用户选择的状态的值。硬编码的字符串每次只会过滤相同的字符串
这是网格的开始。我想在值之间插入“”,但是我不能这样做。
@(Html.Kendo().Grid<Item>()
.Name("grid").Scrollable(c => c.Enabled(true).Height(1000))
.DataSource(dataSource => dataSource
.Ajax()
.Filter(f=>f.Add(a=>a.Status).IsEqualTo(""))
.Read(read => read.Action("Products_Read",
"Controller"))
.PageSize(20)
)
这是asp-action
图标,用户单击该图标即可获取所有属于“退货项目”状态的项目。
<a asp-action="DeviceLogWIP" asp-controller="Controller" asp-route-status="Items to Return" id="itemsToReturn" class="fa fa-barcode fa-3x dashboard-icons"><span class="badge badge-info dashboard-badges">@Model.Item.Where(e => e.Status == "Items to Return").Count()</span></a>
这是我最初使用普通HTML表时最初使用它的方式的控制器。
public ActionResult DeviceLogWIP(string status)
{
ViewBag.Title = "Device Log - WIP";
ViewBag.Status = status;
List<Item> items = new List<Item>();
if (status != "" && status != null)
{
items = _itemService.GetItems().Where(c => c.Status == status).ToList();
}
else
{
items= _itemService.GetItems().ToList();
}
return View(new DeviceLogViewModel()
{
Items= items,
Status = status
});
}
当前,网格过滤器未对任何内容进行预过滤。但是它们会预先过滤.IsEqualTo(“”))中“”之间的所有内容
处理此问题的最佳方法是什么?
编辑:通过将状态值传递到ViewBag中,我能够解决此问题。现在显示为
.DataSource(dataSource => dataSource
.Ajax()
.Filter(f=>f.Add(a=>a.Status).IsEqualTo(ViewBag.Status))
.Read(read => read.Action("Products_Read", "Controller"))
.PageSize(20)
)