Kendo MVC Grid не загружает данные в дочерний шаблон

У меня так много проблем с попыткой загрузить данные в дочернюю сетку в Kendo MVC, что первая сетка загружается нормально, но когда я расширяю этого пользователя, дочерняя сетка ничего не показывает. Даже если я поставлю точку останова в своем контроллере, событие Read не будет вызвано. Когда я щелкаю столбец для фильтрации, метод Read возвращает ошибку

Словарь параметров содержит нулевую запись для параметра «id» ненулевого типа «System.Int32» для метода «System.Web.Mvc.ActionResult ReadBalances (Kendo.Mvc.UI.DataSourceRequest, Int32)» в «Apple.Web .Контроллеры.Контроллер баланса». Необязательный параметр должен быть ссылочным типом, типом, допускающим значение NULL, или быть объявленным как необязательный параметр. Номер параметра: параметры

Я не получаю никаких ошибок в javascript на стороне клиента.

Контроллер

   public ActionResult Read([DataSourceRequest] DataSourceRequest request)
    {
        var users = _userProcessor.Get(Constants.USER_TYPE_CLIENT).Result as List<User>;
        return Json(users.ToDataSourceResult(request));
    }

    public ActionResult ReadBalances([DataSourceRequest] DataSourceRequest request, int id)
    {
        var balances = _balanceProcessor.Get(id).Result as List<Balance>;
        DataSourceResult result = balances.ToDataSourceResult(request, balance => new {
            Id = balance.Id,
            Amount = balance.Amount,
            UserId = balance.UserId,
            Description = balance.Description,
            Date = balance.Date
        });
        return Json(result, JsonRequestBehavior.AllowGet);
    }

Индекс.cshtml

@(Html.Kendo().Grid<Apple.DataLayer.Types.User>()
              .Name("gridUsers")
              .Columns(columns =>
              {
              columns.Bound(c => c.Name);
              columns.Bound(c => c.LastName);
              columns.Bound(c => c.Balance);
              })
              .Sortable()
              .Pageable()
              .Scrollable()
              .Filterable(f => f.Extra(false))
              .DataSource(dataSource => dataSource
                  .Ajax()
                  .Model(model =>
                  {
                     model.Id(u => u.Id);
                  })
                  .Read(read => read.Action("Read", "Balance"))
              )
              .HtmlAttributes(new { style = "height: 550px;", id = "gridUsers" })
              .ClientDetailTemplateId("client-template")
)

<script id="client-template" type="text/kendo-template">
@(Html.Kendo().Grid<Apple.DataLayer.Types.Balance>()
              .Name("grid_#=Id#")
              .ToolBar(toolbar =>
              {
                  toolbar.Custom().Text("Nuevo").HtmlAttributes(new { onclick = "return Nuevo(#=Id#, this);" });
              })
              .Columns(columns =>
              {
                  columns.Bound(c => c.Date).Width(150).Format("{0:dd/MM/yyyy hh:mm}");
                  columns.Bound(c => c.Description);
                  columns.Bound(c => c.Amount);
              })
              .DataSource(dataSource => dataSource
              .Ajax()
              .Model(model =>
              {
                model.Id(d => d.Id);
              })
              .Read(read => read.Action("ReadBalances", "Balance", new { id = "#=Id#" }))
              .PageSize(5)
              )
              .Pageable()
              .Sortable()
              .Filterable()
              .ToClientTemplate()
)
</script>

person AngelRuizC    schedule 21.04.2018    source источник


Ответы (1)


Я думаю, что использование одного и того же имени поля, id, как для родительской, так и для дочерней сетки, может быть проблемой. Согласно кендо, так как имена полей одинаковы, одно перезапишет другое, поэтому следует использовать разные имена полей. Попробуйте изменить id родительской сетки на parentID.

person Jake Reece    schedule 21.04.2018