【问题标题】:Kendo Grid: Toolbar template issueKendo Grid:工具栏模板问题
【发布时间】:2014-07-31 15:19:34
【问题描述】:

我有一个列出道路信息的网格,并且想要一个工具栏模板,它允许我通过从 DropDownList 中选择特许权来过滤道路。

Something like this

我的代码:

CSHTML

<div id="datagrid">
    @(Html.Kendo().Grid<SustIMS.Models.RoadModel>()
        .Name("datagrid_Roads")
        .Columns(columns =>
        {
            columns.Bound(r => r.RoadCode).Title(ViewBag.lblCode).Width(140);
            columns.Bound(r => r.RoadType).Title(ViewBag.RoadType).Width(140);
            columns.Bound(r => r.RoadMediumDescription).Title(ViewBag.lblDescription);
            columns.Bound(r => r.ConcessionCode).Title("CCode").Hidden();
            columns.Bound(r => r.ConcessionMediumDescription).Hidden().Title(ViewBag.Concession);
        })
        .ToolBar(toolbar =>
        {
            toolbar.Template(@<text>
                <div class="toolbar">
                        <label class="category-label" for="category">Concessão:</label>
                            @(Html.Kendo().DropDownList()
                                .Name("concessions")
                                .OptionLabel("All")
                                .DataTextField("ConcessionMediumDescription")
                                .DataValueField("CCode")
                                .AutoBind(false)
                                .Events(e => e.Change("concessionChange"))
                                .DataSource(ds =>
                                {
                                    ds.Read("ConcessionFiltering", "MasterData");
                                })
                            ) 
                            </div>
            </text>);
        })
        .HtmlAttributes(new { style = "height: 534px;" })
        ...
        )
    )
</div>

<script type="text/javascript">

    function concessionChange() {
        var value = this.value(),
                grid = $("#datagrid_Roads").data("kendoGrid");

        if (value) {
            grid.dataSource.filter({ field: "ConcessionMediumDescription", operator: "eq", value: value });
        } else {
            grid.dataSource.filter({});
        }
    }

控制器

public ActionResult ConcessionFiltering()
{
    ConcessionModel cm = new ConcessionModel();
    var aux = cm.getConcessions();
    return Json(aux.concessions.Select(c => c.concession.mediumDescription).Distinct(), JsonRequestBehavior.AllowGet);
}

这是当前结果:

列表中“未定义”这个词填了 16 次,这是我目前拥有的让步次数。当我选择其中一个未定义的选项时,它会显示特许权的实际名称,刷新网格但不会过滤它。

我希望列表显示特许权名称并在我选择其中一个时按特许权过滤网格。我错过了什么?

【问题讨论】:

    标签: kendo-ui kendo-grid kendo-asp.net-mvc kendo-template


    【解决方案1】:

    改一下

    return Json(aux.concessions.Select(c => c.concession.mediumDescription).Distinct(), hJsonRequestBehavior.AllowGet);
    

    return Json(aux.concessions.Select(c => new ConcessionModel { Description = c.concession.mediumDescription }).Distinct(), JsonRequestBehavior.AllowGet);
    

    【讨论】:

      【解决方案2】:

      首先,仔细检查您从控制器方法返回的 Json。看起来您的 ConcessionMediumDescriptions 中可能没有数据。

      其次,看起来,在您的控制器中,您正在返回一个“ConcessionMediumDescription”数据对象列表。

      我猜它看起来像这样......

      {ConcessionMediumDescription: {
        CCode: 'mycode',
        ...
        }
      }
      

      您可以考虑将标题字段作为此 Json 的一部分返回,并将其用于下拉列表的文本字段。这只是我根据您在该控制器中返回的内容的猜测。


      理想的 Json 会是这样的......

      [{
        {{id: 'id1'},{text: 'text1'}},
        {{id: 'id2'},{text: 'text2'}}
      }]
      

      你这样定义你的下拉菜单。

      .DataTextField("text")
      .DataValueField("id")
      

      【讨论】:

      • 我已经检查过了,Json 真的是空的。但是,这很奇怪,因为我使用此方法从内置过滤器的列中填充下拉列表,并且优惠显示正确,并且过滤器正常工作......这很奇怪
      【解决方案3】:

      你必须像这样做json返回线。

      return Json(aux.concessions.Select(c => new { Value = c.concession.DATAVALUE, Text = c.concession.DATATEXT }), JsonRequestBehavior.AllowGet);
      

      只需更改 DATAVALUE 和 DATATEXT

      【讨论】:

      • 感谢您的回答。虽然@LittleDragon 已经提供了解决方案
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多