Get the value of a form that has a list

1

Are you okay? I am new, I know I am asking a lot of questions, but I am having some doubts and I can not find an answer, I am trying to capture the event of a button in asp.net mvc using razor, I am with the following button:

<input type="button" value="Salvar" onclick="location.href='@Url.Action("insert")'" />

and this is my controller code

    public ActionResult insert()
    {
        myMetodInsert();//futuro método que ira inserir dados na base
        return List();
    }

The method returns another List method that returns a view , but I noticed that it tries to access a page with the method name, but that is not the intention. The intent is to call a method that will include data in the database and then return the page. Could you help?

Edit

The question is this: I open a page with a list of goods, where the person can change only the value of the goods. This list contains in its first element a selection field with checkbox (with value boolean in it).

Once the person sets checkbox , it enables editing. The moment the person clicks the save button, I must capture this event, receive this modified list, and persist the modification in the database.

I'm just in doubt about catching the event. When I used java with JSF, I just put the bean + method on the button it identified. In ASP.NET MVC do not you have something like this?

For further clarification follow the code like this:

View

@model Teste.Models.Produto

@{
    Layout = null;
}
@using (Html.BeginForm("Salvar", "ListaProdutoCab", FormMethod.Post))
{
    <table>
        <thead>
            <tr>
                <th>Selecione</th>
                <th>Produto</th>
                <th>Valor</th>

            </tr>
        </thead> @foreach (var item in Model.listaBebida)
        {
            <tr>
                <td> @Html.CheckBoxFor(modelItem => item.isEditado)</td>
                <td> @Html.TextBoxFor(modelItem => item.produto, new { disabled = "disabled" }) </td>
                <td> @Html.TextBoxFor(modelItem => item.valor) </td>

            </tr>
        }
    </table>
    <div id="modal">
        <div id="botoes">
            <button type="submit">Salvar</button>
        </div>
    </div>
}

My Controller:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Teste.DAO;
using Teste.Models;

namespace Teste.Controllers
{
    public class ListaProdutoCab: Controller
    {
        //
        // GET: /ListaProdutoCab/
        ListaProdutoService service = new ListaProdutoService();
        Produto produto = new Produto();
        Session usuario = new Session("Genisson", 058);

        List<ObjectMasterProduto> listaProduto= new List<ObjectMasterProduto>();

        public ActionResult ListaProdutoCab()
        {
            return View();
        }

        public ActionResult List()

        {
            service.carregarListaBebida(produto.listaBebida);
            return PartialView(produto);
        }
        [HttpPost]
        public ActionResult Salvar()
        {
            service.Salvar(produto.listaBebida, usuario);
            return RedirectToAction("List");
        }

    }
}

Product

 public class Produto
    {

        //Chamadas externas
        public Bebida bebida{ get; set; }

        public List<Bebida> listaBebida{ get; set; }

        public Produto()
        {

        }


    }

Drink class

public class bebida
    {

        //Chamadas externas
        public String nome{ get; set; }

        public Double Valor{ get; set; }

        public Bebida()
        {

        }


    }

Does it do what I need only using native asp.net mvc api? or do I really need to use other api's?

    
asked by anonymous 29.06.2015 / 22:41

2 answers

1

If you are going to use a form to insert data, you should put the type of button as submit .

If this is the case, try doing something like this:

@using(Html.BeginForm("Salvar", "Algum", FormMethod.Post))
{
    <input type="text" name="nome" />
    <button type="submit">Salvar</button>
}

And in the controller do something like this:

public class AlgumController : Controller
{
    public ActionResult Salvar(string nome)
    {
        Respositorio.Salvar(nome);
        return RedirectToAction("Listar");
    }

    public ActionResult Listar()
    {
        var lista = Repositorio.Listar();

        return View("Lista", lista);
    }
}

By doing this the Salvar method will get the name value corresponding to input HTML and will call a method to perform the save action. After saving the method returns a RedirectToAction that will redirect to the Listar method.

Editing:

If you are using jQuery in your project you can do the following:

$('#meu-btn').on('click', function()
{
    var dadosParaSalvar = coletarDadosDaTabela();

    $.ajax({
        cache: false,
        type: "GET",
        url: 'Algum/Salvar', //'Controller/Action'
        data: { dados: dadosParaSalvar },
        success: function (response) {
            if (response.error == undefined || response.success) {
                try {
                    //Válido apenas se você retornar a lista como JSON, utilizando JsonResult,
                    //caso contrário deve-se utilizar o JSON.parse('string')
                    var lista = response;

                    consumirListaDeRetorno(lista);
                }
                catch (err) {
                    Erro(err);
                }
            }
        }
    });
});

And in controller to receive data sent by ajax and return JSON do as follows:

public class AlgumController : Controller
{
    //Todos os registros que forem passados para uma action, desde que possuam o tipo correto
    //e o mesmo nome são encapsulados automáticamente em uma classe modelo, como a classe 'ClasseModelo'.
    //Se todos os dados possuirem corretamente as propriedades presentes na classe 'ClasseModelo', o array passado
    //utilizando ajax será automáticamente convertido para uma List<ClasseModelo>.
    public ActionResult Salvar(IList<ClasseModelo> dados)
    {
        //Aqui você adiciona a lógica para o salvamento das informações
        Respositorio.Salvar(dados);
        //Aqui você gera uma lista atualizada dos dados que deseja retornar
        var listaAtualizada = Repositorio.Listar();

        //Aqui você passa o objeto 'listaAtualizada' como primeiro parâmetro para que
        //ele seja serializado no formano JSON para o retorno.
        //O segundo parâmetro permite que o retorno JSON seja permitido utilizando o método HTTP GET
        return Json(listaAtualizada , JsonRequestBehavior.AllowGet);
    }
}

So you will collect data using JavaScript , will send to your controller using Ajax , will process data in controller and return JSON so callback success ajax use the return list.

    
30.06.2015 / 00:15
0

Personal after some time searching, I found that the foreach is not very recommendable in this case, because it duplicates the id's and leaves invalid at the html level. the disable property makes the values return null of the form, the solution was change from foreach to for and disable disable by readonly, thanks guys.

    
01.07.2015 / 14:09