How to pass the Model to the controller via JQuery

0

Is it possible to pass the filled Model to the controller via jquery, without having to create a variable and populate it with all fields?

Example:

I have a modal popup that opens a partialview with several fields. In this view I have the model:

@model Contato

fields fill in the model:

@Html.EditorFor(model => model.Nome)
@Html.EditorFor(model => model.Email)
@Html.EditorFor(model => model.Telefone)
@Html.EditorFor(model => model.Endereco)
@Html.EditorFor(model => model.Documento)

Click the button to close the model

<div class="modal-footer">
        <button type="button" class="btn btn-default"
                data-dismiss="modal" id="btnSaveContato">
            Close
        </button>
    </div>

I want to pass the whole model to the controller when closing the popup

<script>
    $('#btnSaveContato').on('click', function () {
        var model = @model???
    });
</script>

Without having to do this

var model = {
 Nome = campo.val(),
 Email = campo.val(),
 Telefone = campo.val(),
 Endereco = campo.val(),
 Documento = campo.val(),
}

Is it possible?

    
asked by anonymous 31.08.2017 / 16:48

1 answer

1

Hello, Guilherme, I do not know if this can help, but I do it in the following way:

PS: I'm not sure if it's the right way, but I got it right.

I created a javascript function:

function ChamarAjax(Pagina, Data = null, DivRecebedor = null) {
    // verifico se foi passado algum valor para o json
    if (typeof (Data) == "undefined" && Data == null) {

        // se for vazio gero um valor aleatorio qualquer
        Data = { nome: "nome" }

    }
    // função pace tracker que mostra um loading no topo da pagina
    Pace.track(function () {

        // chamo o ajax
        $.ajax({
            type: 'POST',
            contentType: "application/json; charset=utf-8",
            dataType: 'json',
            url: Pagina,
            /// transformo os valores do form no formato json e envio via post

            data: JSON.stringify(Data),

            // caso tenha algum sucesso ele pega o retorno do controller
            success: function (data) {

                // verifico se esse campo vai atualizar algum div ou pagina completa.
                if (typeof (DivRecebedor) !== "undefined" && DivRecebedor !== null) {
                    $("#" + DivRecebedor).html(data);
                } else {

                    // redireciono para o controller de resposta do controller json
                    window.location.replace(data);
                }

            },

           // se retornar algum erro mostra na tela 
            error: function (a, jqXHR, exception) {
                jAlert(Data, "ERRO");
            }
        });
    });
}

This script will execute a post via json to my controller. Calling this function by the jquery click:

 $(document).on('click', '#botaoLogarEstoque', function () {
    var campo1 = $("#campo01").val();
    var campo2 = $("#campo02").val();
    var campo3 = $("#campo03").val();
    var campo4 = $("#campo04").val();
    var campo5 = $("#campo05").val();

         // pego os valores para virar um json dentro da função chamarajax
        data = {
              "campo01" = campo01,
              "campo02" = campo02,
              "campo03" = campo03,
              "campo04" = campo04,
              "campo05" = campo05
        }
        console.log(data);

       // aqui eu chamo meu controller
       ChamarAjax("/Login/AcessoSistema", data, null);

    });

In the controller I do this:

  [HttpPost]
        public ActionResult AcessoSistema(int campo01,
                                          int campo02,
                                          int campo03,
                                          int campo04,
                                          int campo05)
        {
            System.Threading.Thread.Sleep(2000);

            // trato os dados recebidos via ajax-json
            // campo01....campo05.

            // aqui e o retorno do json para o controller que vai mostrar a view.
            return Json("/Home/Index");
        }
    
04.06.2018 / 13:54