Как передать значение в DataSource .Filter без использования строки - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть две страницы в моем веб-приложении.Тот, который имеет блок-схему для элемента с несколькими различными статусами.Другой - это сетка кендо.Когда пользователь щелкает состояние на блок-схеме, я хотел бы перенести его в сетку 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)
                    )
...