【问题标题】:How to refresh a kendo ui grid inside a partial view without reloading the entire page?如何在不重新加载整个页面的情况下刷新局部视图内的剑道 ui 网格?
【发布时间】:2015-12-30 17:00:18
【问题描述】:

早安,

我很难刷新放置在局部视图内的剑道网格。看看我目前在局部视图中使用的代码:

@model IEnumerable<TelerikMvcAscernAdmin2.Models.ConnectionViewModel>
@(Html.Kendo().Grid(Model).Name("id").Sortable().Columns(c =>  {
  c.Bound(p => p.SystemId);
  c.Bound(p => p.Host);
  c.Bound(p => p.Port);})
  .DataSource(datasoure =>datasoure.Server().PageSize(25).Sort(sort=>{sort.Add(c => c.Host).Ascending(); })
                  ).Filterable()
  .Pageable(p => p.PageSizes(new int[] { 25, 35, 40 })
        .Refresh(true)).Groupable().Sortable().Scrollable(s => s.Height("200px")).RowAction(row =>   {
  if (row.DataItem.Port == 0) row.HtmlAttributes["style"] = "background:red";  }).HtmlAttributes(new { style = "width: 800px;" }) )

<script>  $(document).ready(function () {
          var refId = setInterval(function () {
          var grid = $("#id").data("kendoGrid");
          grid.dataSource.read();
          }, 40000);
          });   </script>

如您所见,我正在使用服务器端功能,以便自动刷新此网格。我尝试将它切换到 Ajax 函数,但是当我这样做时,我的网格无法刷新。

我在我的 Home 视图中渲染这个局部视图,如下所示:

@Html.Action("EngineConnection", "GatewayConnections")

另外,看看我的动作控制器方法,我将所有数据返回到局部视图:

public ActionResult EngineConnection()
    {
        var gatewayConnections = GatewayConnections.GetAllConnections();
        var agents = Agent.RetrieveAgents();
        var connectionViewModels = (from agent in agents.Where(a => a.Active)
                                    join gatewayConnection in gatewayConnections on agent.SystemId equals gatewayConnection.ClientId into
                                        agentConnections
                                    from agentConnection in agentConnections.DefaultIfEmpty()
                                    select
                                        new ConnectionViewModel
                                        {
                                            SystemId = agent.SystemId,
                                            Host = (agentConnection == null ? string.Empty : agentConnection.Host),
                                            Port = (agentConnection == null ? 0 : agentConnection.Port)
                                        }).ToList();
        return PartialView("_EngineConnection", connectionViewModels);
    }

我已经尝试返回一个 JSON 对象,但这似乎没有奏效。有没有办法只刷新网格而不是整个页面,并且仍然将网格保持在局部视图内?

任何建议都会有所帮助!

谢谢

【问题讨论】:

    标签: javascript ajax asp.net-mvc kendo-grid kendo-asp.net-mvc


    【解决方案1】:

    我建议您按照以下方式绑定网格。

        @(Html.Kendo().Grid<EntityStandardGridModel>()
        .Name("KendoEntityStandardGrid")
        .Columns(columns =>
          {
             //columns
          })
          .Selectable(selectable => selectable.Mode(GridSelectionMode.Single))
          .Sortable(sortable => sortable.AllowUnsort(false))
          .Scrollable(scrollable => scrollable.Virtual(true))
          .Resizable(resizable => resizable.Columns(true))
          .DataSource(dataSource => dataSource
              .Ajax()
              .PageSize(100)
              .Model(model => model.Id(p => p.SearchId))
              .Read(read => read.Action("GetStandardGriddata", "Search", new { SearchId = Model.SearchId }))
            )
         )
    

    【讨论】:

    • 感谢您的意见,我尝试按照您的建议绑定网格。在页面加载时,所有数据都存在于网格中,但是当我只刷新网格时,我的所有信息都会从网格中消失。我想知道它是否与动作方法有关。
    • 在进一步查看 Ganesh 提供的方法似乎是最好的选择之后,我只需要创建一个不同的方法来以 JSON 格式呈现信息,并在我的读取操作中指向它。
    猜你喜欢
    • 1970-01-01
    • 2020-10-09
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多