0

在我看来,我有一个网格(来自 KendoUI),我想根据复选框的状态进行更新。这个想法是,我想在单击复选框时将复选框的值(布尔值)发送到我的控制器,然后调用为我的数据提供数据的服务,并将复选框中的布尔值作为参数。从那里,我想用来自服务调用的新数据刷新已经在我的网格中填充的列表。

我尝试了一些 ajax 调用,但我似乎无法解决这个问题。

这是我的索引视图:

<div class="row-fluid">
    <div class="span12">
        <div class="k-block">
            <div class="k-header">Unit List</div>
            @Html.CheckBox("mycheckbox")
            @(Html.Kendo().Grid(Model.UnitTypes)
            .Name("Grid")
            .Columns(columns =>
                {
                    columns.Bound(p => p.Id).Groupable(false);
                    columns.Bound(p => p.Name);
                    columns.Command(command => { command.Custom("Edit Unit"); }).Width(160);
                })
                .Groupable()
                .Pageable()
                .Sortable()
                .Scrollable()
                .Filterable()
                  )
          }

        </div>
    </div>

这是我的控制器:

public ActionResult Index()
{
    var client = new UnitServiceClient();
    var listOfUnitsFromService = client.GetListOfUnits(true);

    var model = new UnitModel
                    {
                        UnitTypes = listOfUnitsFromService.ToList()
                    };
    return View(model);
}

希望有人可以提供帮助,因为我对 ajax 调用一无所知:)

4

2 回答 2

2

您要做的是创建一个控制器操作,该操作接受一个布尔值并返回一个包含网格所有 HTML 的 PartialView。

然后,您的 Ajax 将调用该控制器操作,传入布尔值并从服务器接收网格 HTML。然后它将使用新的 HTML 更新包含网格的 div。

控制器

[HttpPost]
public PartialViewResult Blah(bool someFlag)
{
    // Standard controller code.  Load a model.  Return a PartialView.
}

阿贾克斯

$.ajax({
    type: "post",
    dataType: "html",
    url: '/Home/Blah',
    data: 'someFlag=' + $('#mycheckbox').val(),
    success: function (response) {
        $('#k-block').html(response);
    },
});
于 2013-04-24T18:57:14.357 回答
0

好的,所以我找到了我的解决方案,至少现在是这样。最终将复选框与我的 FormsCollection 一起传递到控制器中,然后根据其“开/关”值进行处理。

我的表单只是通过使用以下标记行提交的:

<input type="checkbox" name="refresh" class="k-checkbox" id="refresh" onclick="document.forms.refreshForm.submit();"/>

然后,我根据模型中的“已禁用”属性为我的行设置样式,如下所示:

    @(Html.Kendo().Grid(Model.UnitTypes)
          .Name("Grid")
          .RowAction(row =>
              {
                  if (row.DataItem.Disabled)
                  {
                      row.HtmlAttributes["style"] = "background-color: LightGray";
                  }
              })
          .Columns(columns =>
              {
                  columns.Bound(p => p.Id).Groupable(false);
                  columns.Bound(p => p.Name);
                  columns.Bound(p => p.Disabled);
                  columns.Command(command => { command.Custom("Edit Unit"); }).Width(160);
              })
          .Groupable()
          .Pageable()
          .Sortable()
          .Scrollable()
          .Filterable())
于 2013-04-25T11:29:03.063 回答