Anexsoft | Blog y dictado de cursos de Tecnología

En este encontrarás tutoriales de tecnología como PHP, ASP.NET MVC, Front-End, entre otros y cursos exigentes de modalidad online que te ayudarán a crecer profesionalmente.

Formas de enviar parámetros a una acción en ASP.NET MVC
Actualizado el 21 Enero, 2016 y leído 16,541 veces
Calificación: 9.86 / 10

Formas de enviar parámetros a una acción en ASP.NET MVC

Anexsoft

Hay muchas formas de pasar parametros a las acciones usando MVC. Vamos a ver una pequeña lista de ejemplos con recomendaciones que te van a ser múy útiles en tus desarrollos.

 

Pasando variables sueltas
Con esto me refiero que puedo pasarametros de manera independiente, es decir un int, string entre otros.

La vista sería de esta manera:

@using (Html.BeginForm("Guardar", "home")) 
{
    <label>Nombre</label>
    <input type="text" name="nombre" />
    <br />
    <label>Apellido</label>
    <input type="text" name="apellido" />
    <br />
    
    <button type="submit">Enviar</button>
}

Lo recibo de esta manera, teniendo en cuenta que el nombre de los controles html debe ser igual a los nombres de las variables que recibe mi acción guardar.

public void Guardar(string nombre, string apellido)

Image title

 

Pasando una entidad
Lo normal es pasar nuestra entidad a la acción, una de las cosas que más me gusta de ASP.NET MVC, to ahorra mucho código.

@model web.Models.Usuario

@using (Html.BeginForm("Guardar", "home")) 
{
    <label>Nombre</label>
    @Html.TextBoxFor(x => x.Nombre)
    <br />
    <label>Apellidos</label>
    @Html.TextBoxFor(x => x.Apellido)
    <br />
    <button type="submit">Enviar</button>
}

Y lo recibimos de esta manera

public void Guardar(Usuario model)

Image title

 

Selecciones múltiples (Checkbox)
Ahora vamos a ver como pasar los valores seleccionados por un checkbox.

@using (Html.BeginForm("Guardar", "home")) 
{
    <label>
        Valor 1
        <input type="checkbox" name="valor" value="1" />
    </label>
    <label>
        Valor 2
        <input type="checkbox" name="valor" value="2" />
    </label>
    <label>
        Valor 3
        <input type="checkbox" name="valor" value="3" />
    </label>
    
    <button type="submit">Enviar</button>
}

Nuestra acción debera recibir un int[], o tambien podría ser un List<Int>

public void Guardar(int[] valor = null)

Lo incializo como null en el caso que no se seleccione ningún valor.

Image title

Si quisiera llenar una propiedad de nuestra entidad que sea una lista genérica, usando esta lógica lo podemos hacer. Por ejemplo, desde nuestro formulario actual queremos crear el usuario y asignarle los cursos, por lo tanto el usuario tiene una propiedad que puede ser List<Cursos> Cursos { get; set; }, entonces en nuestra acción haríamos lo siguiente

public void Guardar(Usuario model, int[] valor = null)
{
    if (valor != null) 
    {
        foreach (int v in valor) 
        {
            model.Cursos.Add(new Curso { id = v });
        }
    }
}

Voy a investigar una forma más práctica de hacer esto, cosa que en nuestro parametro model ya recibe la lista porque es parte del atributo.

¿Tengo dos parametros con los mismos nombres?
Se nos pide guardar el nombre del alumno y el profesor,  ambos comparten el mismo atributo "Nombre".  Entonces lo que debemos hacer es decirle a nuestra vista con que nombre queremos recibir los parámetros a enviar a nuestra acción.

@using (Html.BeginForm("Guardar", "home")) 
{
    <label>Nombre del alumno</label>
    <input type="text" name="Usuario.Nombre" value="" />
    
    <label>Nombre del profesor</label>
    <input type="text" name="Profesor.Nombre" value="" />
    
    <button type="submit">Enviar</button>
}

En los nombres de los controles html agrego antes el nombre del parámetro que lo va a recibir, y luego el atributo que queremos llenar.

Nuestra acción debe ser de la siguiente manera, así que cada parámetro ya sabe a donde llegar

public void Guardar(Usuario Usuario, Profesor Profesor)

Image title

 

Queremos crear varios usuarios desde un sola vista
Para esto vamos a tener que agregar un indice a cada nombre de los controles html a usar

for(var i = 0; i <= 4; i ++)
{
    <div>
        <label>Nombre</label>
        <input type="text" name="model[@i].Nombre" />
   
        <label>Apellidos</label>
        <input type="text" name="model[@i].Apellido" />
    </div>       
}

Nuestra acción:

public void Guardar(List model)

Image title

¡Adquiera ya!

  • Software de Venta e Inventario hecho en PHP y Codeigniter

    Software de Venta e Inventario hecho en PHP y Codeigniter
  • Software de Portafolio Profesional hecho en ASP.NET MVC 5 C#

    Software de Portafolio Profesional hecho en ASP.NET MVC 5 C#
  • Código de fuente de Red Social desarrollada en ASP.NET MVC

    Código de fuente de Red Social desarrollada en ASP.NET MVC

Últimas publicaciones

Encuesta

¿Sobre qué te gustaría que se hable más?

Síguenos

Estudia con nosotros y crece profesionalmente

Nuestros cursos han sido hecho en base a lo que demanda el mercado hoy en día.
La experiencia obtenida es la de un ambiente laboral.

Anexsoft
© 2017 Anexsoft, blog y cursos online de TI.