如何不使用字符串将值传递给DataSource .Filter

时间:2019-02-08 14:20:26

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

我的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)
                    )

0 个答案:

没有答案