Two Dropdowlist ASP.NET MVC 5 filter

Asked

Viewed 408 times

0

I would like to make a filter with two DropDownList. In the first filter are filtered the registered Units and in the second the Functions registered in that unit, with their respective Employees. The final result would be the list of Officials referring to that function in the Grid.

The Filter works on GridView, but not filtered the function according to the chosen unit.

Model CNES

public int CNESID { get; set; }
public string UnidadeID { get; set; }
public string Funcao { get; set; }
public string NomeProfissional { get; set; }
public string CPF { get; set; }

Controller

 public class CNESController : Controller
 {
        private PortalPainelEntities db = new PortalPainelEntities();

        // GET: /CNES/
        public ActionResult Index(int? pagina, string currentFilter, string Pesquisa)
        {
            int tamanhopagina = 15;
            int numeropagina = pagina ?? 1;

            if (Pesquisa != null)
            {
                pagina = 1;
            }
            else
            {
                Pesquisa = currentFilter;
            }

            ViewBag.CurrentFilter = Pesquisa;

            var cnes = from s in db.CNES select s;


            //Metodo do Filtro para o Grid View

            if (!String.IsNullOrEmpty(Pesquisa))
            {
                cnes = cnes.Where(p =>   p.NomeUnidade.ToUpper().Contains(Pesquisa.ToUpper())
                                         || p.Funcao.ToUpper().Contains(Pesquisa.ToUpper()));
            }

            return View(cnes.OrderBy(p => p.Nr_Cnes).ToPagedList(numeropagina, tamanhopagina));
        }

        //Lista de Unidades via JSon

        public JsonResult ObterUnidade()
        {
            var unidadeLista = (from u in db.CNES
                                select new
                                {
                                    u.NomeUnidade
                                }).Distinct().OrderBy(x => x.NomeUnidade);

            return Json(unidadeLista, JsonRequestBehavior.AllowGet);
        }

        //Lista de Funções via Json, filtrando por Unidade.

        public JsonResult ObterFuncao(string unidade)
        {
            var funcao = db.CNES
                .Where(a => a.NomeUnidade == unidade)
                .Select(a => new { a.Funcao }).Distinct()
                .OrderBy(a => a.Funcao);

            return Json(funcao, JsonRequestBehavior.AllowGet);
        }

View

DropDownlist

@using (Html.BeginForm())
{

                <div class="col-md-4">
                        @Html.DropDownList("NomeUnidade",
                        new SelectList(string.Empty, "NomeUnidade", "NomeUnidade"), "Selecione a Unidade",
                        new { @class = "form-control", @id = "unidade" })



                    </div>
                    <div class="col-md-4">
                        @Html.DropDownList("Pesquisa",
                        new SelectList(string.Empty, "Funcao", "Funcao"), "Selecione a Função",
                        new  {@class = "form-control", @id = "funcao" })
                    </div>

                    <div class="col-md-1">
                        <input type="submit" name="btnSubmit" value="Buscar" class="btn btn-primary" />
                    </div>
}

Script for popular the DropDownList

<script type="text/javascript">

    $(document).ready(function () {

        $.getJSON('/CNES/ObterUnidade', function (data) {
            for (i = 0; i < data.length; i++) {
                $('#unidade').append('<option value="' +
                data[i].NomeUnidade + '">' + data[i].NomeUnidade + '</option');
            }

        }).fail(function (jqXHR, textStatus, errorThrown) {
            alert('Erro ao obter a Unidade!');
        });
    });

    $('#unidade').change(function () {
        var unidade = $(this).find(":selected").val();


        $.getJSON('/CNES/ObterFuncao', { unidade: unidade }, function (data) {

            $('#funcao option').remove();

            for (i = 0; i < data.length; i++) {
                $('#funcao').append('<option value="' +
                data[i].Funcao + '">' + data[i].Funcao + '</option');
            }

        }).fail(function (jqXHR, textStatus, errorThrown) {
            // Ajax fail callback function.
            alert('Erro ao obter a Função.!');
        });
    });
No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.