Kendo MVC Grid не загружает данные по шаблону для детей

AngelRuizC спросил: 28 марта 2018 в 01:53 в: c#

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

Словарь параметров содержит нулевую запись для параметра 'id' типа, не имеющего значения nullable 'System.Int32 'для метода' System.Web.Mvc.ActionResult ReadBalances (Kendo.Mvc.UI.DataSourceRequest, Int32) 'в' Apple.Web.Controllers.BalanceController '. Необязательный параметр должен быть ссылочным типом, нулевым типом или быть объявлен как необязательный параметр. Nombre del parámetro: parameters

Я не получаю никаких ошибок на клиентском 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);
    }

Index.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>

1 ответ

Jake Reece ответил: 28 марта 2018 в 02:56

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