Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Kendo UI MVC-网格分页、排序、刷新不使用WebAPI绑定_C#_Asp.net Mvc_Asp.net Web Api_Kendo Ui_Kendo Asp.net Mvc - Fatal编程技术网

C# Kendo UI MVC-网格分页、排序、刷新不使用WebAPI绑定

C# Kendo UI MVC-网格分页、排序、刷新不使用WebAPI绑定,c#,asp.net-mvc,asp.net-web-api,kendo-ui,kendo-asp.net-mvc,C#,Asp.net Mvc,Asp.net Web Api,Kendo Ui,Kendo Asp.net Mvc,当我将数据源设置为WebAPI绑定时,HTTP GET将在控制器上被调用,并返回正确的数据。问题是我的剑道网格没有正确绑定数据,结果我得到了一个空网格 @(Html.Kendo().Grid(Model) .Name("Accounts") .Columns(columns => { columns.Bound(c => c.Description).Title("Account Name");

当我将数据源设置为WebAPI绑定时,HTTP GET将在控制器上被调用,并返回正确的数据。问题是我的剑道网格没有正确绑定数据,结果我得到了一个空网格

@(Html.Kendo().Grid(Model)
        .Name("Accounts")
        .Columns(columns =>
        {
          columns.Bound(c => c.Description).Title("Account Name");
          columns.ForeignKey(c => c.Type, (System.Collections.IEnumerable)ViewData["accountTypes"], "Id", "Name").Title("Account Type");
          columns.ForeignKey(c => c.Currency, (System.Collections.IEnumerable)ViewData["currencyTypes"], "Id", "Name").Title("Account Currency");
          columns.Command(command => { command.Edit(); command.Destroy(); }).Width(210);
        })
        .Sortable(sortable =>
        {
          sortable.SortMode(GridSortMode.SingleColumn);
          sortable.AllowUnsort(false);
        })
        .Pageable(pageable => pageable
            .Refresh(true)
            .PageSizes(true)
            .ButtonCount(5)
        )
        .ToolBar(toolbar => { toolbar.Create(); })
        .Editable(editable => editable.Mode(GridEditMode.InLine))
        .DataSource(dataSource => dataSource
          .WebApi()
          .Model(model =>
          {
            model.Id(p => p.Id);
            model.Field(p => p.Currency).DefaultValue(0).Editable(true);
            model.Field(p => p.Description).Editable(true);
            model.Field(p => p.Type).Editable(true);
          })
          .ServerOperation(true)
          .Read(read => read.Action("Get", "Accounts"))
          .Create(create => create.Action("Post", "Accounts"))
          .Update(update => update.Action("Put", "Accounts", new { id = "{0}" }))
          .Destroy(destroy => destroy.Action("Delete", "Accounts", new { id = "{0}" }))
        .PageSize(10)
    )
)
控制器

// GET: api/values
        [HttpGet]
        public DataSourceResult Get([DataSourceRequest]DataSourceRequest request)
        {
            return _context.Accounts.ToDataSourceResult(request);
        }
作为分页或排序命令的结果,我总是得到一个HTTP200OK,但之后网格是空的。剑道生成的URL为:


当我用浏览器打开JSON时,它实际上会返回JSON。

问题似乎是您混合了两种不同的方式来加载数据。一方面,您通过param将模型传递给网格(当ServerOperation=false时使用这种方法),另一方面,您设置ServerOperation=true并指定读取操作

在这种情况下,网格为空的原因可能是模型为空

查看此演示示例,了解如何实现远程源数据绑定:

示例视图:

控制器示例:


希望这有助于KendoGrid是一个很棒的库,但与许多其他库一样,它肯定可以使用更好的异常处理和更用户友好的异常:)在我看来,在这种情况下网格应该显示异常。

问题在于:当声明Kendo网格并将模型作为参数传递时,如下所示:

@(Html.Kendo().Grid(Model)
您需要删除
.Read()
操作,并确保使用
.ServerOperation(false)
。这适用于WebApi绑定或Ajax绑定:

.DataSource(dataSource => dataSource
      .WebApi()    // also works with .Ajax()
        .Model(model =>
        {
          model.Id(p => p.Id);
        }
      )
      .ServerOperation(false)
      .Create(create => create.Action("Post", "Invoices"))
      .Update(update => update.Action("Put", "Invoices", new { id = "{0}" }))
      .Destroy(destroy => destroy.Action("Delete", "Invoices", new { id = "{0}" }))
      .PageSize(10)
)

此外,还可以删除
DataSourceResult Get()
方法。

您是否尝试过使用
Json()
转换返回的数据?i、 e.
返回Json(_context.Accounts.ToDataSourceResult(请求))
并将控制器功能更改为
公共操作结果获取([DataSourceRequest]DataSourceRequest请求)
。@Sandman,它会给出相同的结果如果在对控制器进行上述更改的同时,修改网格
数据源
,如下所示。将
WebApi()
替换为
Ajax()
并设置
.ServerOperation(false)
。如果这仍然不能解决问题,请考虑用控制器方法返回的数据结构来更新问题。ASP.NET核心也是如此:你是什么意思?你想实现什么?你的答案是一致的,我混合了WebAPI绑定用于Post、Put、Delete操作和Ajax绑定用于Get操作,但不混合。如果你想覆盖网格的排序、过滤和分组功能,你通常只需要kendo中的自定义Ajax绑定。这就是你想做的吗?我从您的问题中了解到,您希望为这些功能使用内置的网格功能,但数据没有显示。我是否误解了您的问题?因为您使用的是两个数据源,您应该传递将通过参数填充网格的模型,在这种情况下,服务器操作应设置为false您不应该有读取操作,或者将读取操作设置为数据源