How to update only the model in ASP.NET MVC?

3

I'm using ASP.NET MVC 5 and EF6 in a project, and I have a class that does a query on the post office website and returns me the address from the zip code. Until then, all right, what I would like to do is to use onblur for as soon as I register the user to leave the CEP field, all other fields (minus the number) related to address are updated.

I use heavily typed View, but I have not found a way to just update the model. Can anyone help me?

    
asked by anonymous 02.10.2015 / 19:23

1 answer

3

Accompanying the @RSinohara , the path is by Ajax in View . On a system that I write, I use a set of methods implemented using jQuery :

function TrocarCidades(id, estadoId) {
    $("#CidadeId").attr('disabled', true);
    $("#EstadoId").attr('disabled', true);

    $.ajax({
        url: "/Estados/SelecionarCidades/" + estadoId,
        success: function (data) {
            if (id == null) {
                $("#BairroId").empty();
                $("#BairroId").append('<option value>Selecione uma Cidade...</option>');
            }
            $("#CidadeId").empty();
            $("#CidadeId").append('<option value>Selecione...</option>');
            $.each(data, function (index, element) {
                $("#CidadeId").append('<option value="' + element.CidadeId + '">' + element.Nome + '</option>');
            });

            $("#CidadeId").attr('disabled', false);
            $("#EstadoId").attr('disabled', false);
            $("#CidadeId").val(id);
        }
    });
}

function TrocarBairros(id, cidadeId) {
    $("#BairroId").attr('disabled', true);
    $("#CidadeId").attr('disabled', true);
    $("#EstadoId").attr('disabled', true);

    $.ajax({
        url: "/Bairros/SelecionarPorCidade/" + cidadeId,
        success: function (data) {
            $("#BairroId").empty();
            $("#BairroId").append('<option value>Selecione...</option>');
            $.each(data, function (index, element) {
                $("#BairroId").append('<option value="' + element.BairroId + '">' + element.Nome + '</option>');
            });

            $("#BairroId").attr('disabled', false);
            $("#CidadeId").attr('disabled', false);
            $("#EstadoId").attr('disabled', false);

            if (id != null) {
                $("#BairroId").val(id);
            }
        }
    });
}

$("#CEP").blur(function () {
    $.ajax({
        url: "/Logradouros/BuscarPorCep/" + $(this).val(),
        success: function (data) {
            $("#EstadoId").val(data.Bairro.Cidade.EstadoId);
            TrocarBairros(data.BairroId, data.Bairro.CidadeId);
            TrocarCidades(data.Bairro.CidadeId, data.Bairro.Cidade.EstadoId);
            $("#Endereco").val(data.Descricao);
        }
    });
});

$("#EstadoId").change(function () {
    TrocarCidades(null, $(this).val());
});

$("#CidadeId").change(function () {
    TrocarBairros(null, $(this).val());
});

This implementation takes into account what districts, cities, and states are DropDownLists . You can simplify this algorithm for your need. That is:

$("#CEP").blur(function () {
    $.ajax({
        url: /* Url de serviço de busca de CEP */
        success: function (data) {
            $("#Estado").val(data.Estado);
            $("#Bairro").val(data.Bairro);
            $("#Cidade").val(data.Cidade);
            $("#Endereco").val(data.Endereco);
        }
    });
});
    
02.10.2015 / 20:23