Pergunta

Eu tenho uma grade de listas de informação Rodoviária e quer uma barra de Ferramentas Modelo que irá permitir-me para filtrar as estradas escolhendo uma Concessão de um DropDownList.

Algo como isto

O meu código:

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({});
        }
    }

Controlador de

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

Este é o resultado atual:

zzz

A lista é preenchida com a palavra "indefinido" 16 vezes, que é o número de concessões que eu tenho atualmente.Quando eu selecionar um dos indefinido opções, ele mostra o nome real da concessão, atualiza a grade, mas não filtrar.

Eu quero a lista para mostrar a concessão de nomes e filtrar a grade de concessão, como eu selecionar um deles.O que eu estou ausente?

Foi útil?

Solução

alterar esse

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

para

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

Outras dicas

Primeiro, verifique duas vezes o que Json você estiver voltando do método de controlador.Parece que o seu ConcessionMediumDescriptions podem não ter dados.

Segundo, parece que, em seu controlador, de que você está retornando uma lista de "ConcessionMediumDescription" objetos de dados.

Eu estou supondo que ele se parece com isso...

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

Você pode considerar o retorno de um campo de título como parte deste Json e usar isto para o campo de texto do seu suspensa.Este é apenas me adivinhar de que você está retornando em que o controlador.


Ideal Json seria somting como este...

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

E você defind seu suspensa como tal.

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

Você precisa fazer o json de retorno de linha como esta.

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

Basta alterar DATAVALUE e DATATEXT

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top