我有一个列出道路信息的网格,并且想要一个工具栏模板,它允许我通过从DropDownList中选择一个让步来过滤道路。
我的代码:
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次,这是我目前拥有的特许权数量。当我选择一个未定义的选项时,它会显示特许权的实际名称,刷新网格但不过滤它。
我希望列表显示特许权名称,并在选择其中一个时按特许过滤网格。我错过了什么?
答案 0 :(得分:1)
首先,仔细检查你从控制器方法返回的Json。看起来您的ConcessionMediumDescriptions可能没有数据。
其次,在您的控制器中,您看起来正在返回“ConcessionMediumDescription”数据对象的列表。
我猜它看起来像这样......
{ConcessionMediumDescription: {
CCode: 'mycode',
...
}
}
您可以考虑将标题字段作为此Json的一部分返回,并将其用于下拉列表的文本字段。这只是我猜测你在那个控制器中返回的内容。
理想的Json会像这样闷闷不乐......
[{
{{id: 'id1'},{text: 'text1'}},
{{id: 'id2'},{text: 'text2'}}
}]
你这样定义你的下拉。
.DataTextField("text")
.DataValueField("id")
答案 1 :(得分: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 :(得分:0)
你必须像这样做json返回行。
return Json(aux.concessions.Select(c => new { Value = c.concession.DATAVALUE, Text = c.concession.DATATEXT }), JsonRequestBehavior.AllowGet);
只需更改DATAVALUE和DATATEXT
即可