none
problema al recibir información desde la vista al controlador en mvc .net RRS feed

  • Pregunta

  • intento utilizando .net y mvc realizar un crud pero la funcion de edit no me recibe en el controlador lo que coloco en la vista, pero si la variable que me recibe le cargo un dato directamente en el controlador si me resulta, pero no logro conseguir que me reciba lo de la vista.

    a continuación les dejo el codigo de la vista donde tendría que envíar el valor de la consulta del dato que quiero editar al controlador en este caso lo que quiero es que me carge esta vista al controlador el dato Cliente_Direccion_Id y que ese dato el controlador utilice

    @model List<Proyecto.Models.ViewModels.DireccionesViewModel>
    @{
            ViewBag.Title = "Ver_Direcciones";
        }
    
    <body>
    
    
    
        <h2 class="text-center mt-4">
        DIRECCIONES
        </h2>
    
        <div>
    
            <div class="container">
                <div class="row mr-4 ml-4 mt-4 mb-4">
                    <div class="col-md-12">
    
    
                        <table class="table table-bordered">
                            <thead class="thead-dark">
                                <tr>
                                    <th scope="col">ID</th>
                                    <th scope="col">CALLE</th>
                                    <th scope="col">NUMERAL</th>
                                    <th scope="col">COMUNA</th>
                                    <th scope="col">BLOCK</th>
                                    <th scope="col">DEPARTAMENTO</th>
                                    <th scope="col">OPCIONES</th>
                                   
                                </tr>
                            </thead>
                            <tbody>
    
                                @foreach (var bElemento in Model)
                                {
                                    <tr>
                                        
                                        <th scope="row">@bElemento.Cliente_Direccion_Id</th>
                                        <td>@bElemento.Cliente_Calle</td>
                                        <td>@bElemento.Cliente_Numeral</td>
                                        <td>@bElemento.Cliente_Comuna</td>
                                        <td>@bElemento.Cliente_Block</td>
                                        <td>@bElemento.Cliente_Departamento</td>
                            
                                        <td>
                                            <a class="btn btn-success" href="~/ClientePanel/Editar_Direccion/@bElemento.Cliente_Direccion_Id">EDITAR</a>
                                                                
    
    
    
    
    
                                        </td>
                                    </tr>
                                }
                            </tbody>
                        </table>
    
    
    
    
                    </div>
                </div>
    
    
            </div>
        </div>
    </body>

    se suponen que al precionar el boton edit debería enviarme el id en este caso Cliente_Direccion_Id al controlador y el controlador trabajar con el.

    El controladorfunciona si le cargo un parametro pero si no le cargo un parametro directamente al controlador me dice que no recibe valores null ya que no tiene ningun valor por que la vista no le carga el valor :( les dejo mi controlador

    public ActionResult Editar_Direccion(int Cliente_Direccion_Id)
            {
                DireccionesEditarViewModel model = new DireccionesEditarViewModel();
                using (var db = new PROYECTO_VENTASEntities())
                {
                    var  bTabla = db.Cliente_Direccion.Find(Cliente_Direccion_Id);
                    model.Cliente_Calle = bTabla.ClienteCalle;
                    model.Cliente_Numeral = bTabla.ClienteNumeral;
                    model.Cliente_Comuna = bTabla.ClienteComuna;
                    model.Cliente_Block = bTabla.ClienteBlock;
                    model.Cliente_Departamento = bTabla.ClienteDepartamento;
                    model.Cliente_Direccion_Id = bTabla.ClienteDireccionId;
    
                }
                    return View(model);
            }
            [HttpPost]
    
            public ActionResult Editar_Direccion(DireccionesViewModel model)
            {
                try
                {
                    if (ModelState.IsValid) 
                    {
                        using (var db = new PROYECTO_VENTASEntities())
                        {
                            var bTabla = db.Cliente_Direccion.Find(model.Cliente_Direccion_Id);
    
    
    
                            bTabla.ClienteCalle = model.Cliente_Calle;
                            bTabla.ClienteNumeral = (int)model.Cliente_Numeral;
                            bTabla.ClienteComuna = model.Cliente_Comuna;
                            bTabla.ClienteBlock = model.Cliente_Block;
                            bTabla.ClienteDepartamento = model.Cliente_Departamento;
                            bTabla.ClienteDireccionId = (int)model.Cliente_Direccion_Id;
    
    
    
    
                            db.Entry(bTabla).State = System.Data.Entity.EntityState.Modified;
                            db.SaveChanges();
    
                        }
                        return Redirect("~/ClientePanel/Agregar_Cliente_Numero_Contacto");
    
                    }
    
                    return View(model);
                }
                catch (Exception ex)
                {
    
                    throw new Exception(ex.Message);
                }
            }

    Sin embargo sin en el public action result le cargo un dato me fuinciona y puedo editar los valores de ese tipo de id pero bueno la idea es que me deje editar cualquier dato y no solo uno

    public ActionResult Editar_Direccion(int Cliente_Direccion_Id=1)

    Espero pueda alguien ayudarme muchas gracias :)

    sábado, 27 de junio de 2020 0:53

Todas las respuestas

  • ¿Cómo tienes el mapa de rutas? ¿Pone el valor predeterminado, es decir {controller}/{action}/{id}?

    Si es así, entonces cuando pasas un parámetro en la url (a diferencia de cuando lo pasas por POST), en el método de acción se tiene que llamar forzosamente "id". No puedes llamarlo ""Cliente_Direccion_Id".

    Para resolverlo basta con que en el método de acción cambies el nombre del argumento y le llames "id".

    public ActionResult Editar_Direccion(int id)
        ...
        var  bTabla = db.Cliente_Direccion.Find(id);

    sábado, 27 de junio de 2020 8:27