Saltar al contenido

Cómo obtener DropDownList SelectedValue en el controlador en MVC

La guía paso a paso o código que hallarás en este artículo es la resolución más fácil y válida que encontramos a tu duda o dilema.

Solución:

1er enfoque (a través de Solicitud o FormCollection):

Puedes leerlo desde Request utilizando Request.Form su nombre desplegable es ddlVendor así que pasa ddlVendor key en formCollection para obtener su valor que se publica por formulario:

string strDDLValue = Request.Form["ddlVendor"].ToString();

o usar FormCollection:

[HttpPost]
public ActionResult ShowAllMobileDetails(MobileViewModel MV,FormCollection form)
           
  string strDDLValue = form["ddlVendor"].ToString();

  return View(MV);

2do enfoque (a través del modelo):

Si desea con el enlace del modelo, agregue una propiedad en el modelo:

public class MobileViewModel 
          
    public List MobileList;
    public SelectList Vendor  get; set; 
    public string SelectedVendor get;set;

y en Vista:

@Html.DropDownListFor(m=>m.SelectedVendor , Model.Vendor, "Select Manufacurer")

y en acción:

[HttpPost]
public ActionResult ShowAllMobileDetails(MobileViewModel MV)
           
   string SelectedValue = MV.SelectedVendor;
   return View(MV);

ACTUALIZAR:

Si también desea publicar el texto del elemento seleccionado, debe agregar un campo oculto y, en la selección desplegable, cambiar el texto del elemento seleccionado en el campo oculto:

public class MobileViewModel 
          
    public List MobileList;
    public SelectList Vendor  get; set; 
    public string SelectVendor get;set;
    public string SelectedvendorText  get; set; 

use jquery para establecer el campo oculto:



@Html.DropDownListFor(m=>m.SelectedVendor , Model.Vendor, "Select Manufacurer")
@Html.HiddenFor(m=>m.SelectedvendorText)

Modelo

Modelo muy básico con campo Género. GetGenderSelectItems() devuelve los elementos seleccionados necesarios para completar DropDownList.

public enum Gender 

    Male, Female


public class MyModel

    public Gender Gender  get; set; 

    public static IEnumerable GetGenderSelectItems()
    
        yield return new SelectListItem  Text = "Male", Value = "Male" ;
        yield return new SelectListItem  Text = "Female", Value = "Female" ;
    

Vista

Por favor, asegúrese de envolver su @Html.DropDownListFor en una etiqueta de formulario.

@model MyModel

@using (Html.BeginForm("MyController", "MyAction", FormMethod.Post)

   @Html.DropDownListFor(m => m.Gender, MyModel.GetGenderSelectItems())
   

Controlador

Su nombre de vista .cshtml Razor debe ser el mismo que el nombre de la acción del controlador y el nombre de la carpeta debe coincidir con el nombre del controlador, por ejemplo ViewsMyControllerMyAction.cshtml.

public class MyController : Controller 

    public ActionResult MyAction()
    
        // shows your form when you load the page
        return View();
    

    [HttpPost]
    public ActionResult MyAction(MyModel model)
    
        // the value is received in the controller.
        var selectedGender = model.Gender;
        return View(model);
    


Ir más lejos

Ahora hagámoslo fuertemente tipado e independiente de la enumeración:

var genderSelectItems = Enum.GetValues(typeof(Gender))
    .Cast()
    .Select(genderString => new SelectListItem 
    
        Text = genderString,
        Value = genderString,
    ).AsEnumerable();

MVC 5/6/Páginas de afeitar

Creo que la mejor manera es con un modelo fuertemente tipado, porque Viewbags ya se está abusando demasiado 🙂

MVC 5 ejemplo

Tu acción de obtener

public async Task Register()
    
        var model = new RegistrationViewModel
        
            Roles = GetRoles()
        ;

        return View(model);
    

Tu modelo de vista

    public class RegistrationViewModel
    
        public string Name  get; set; 

        public int? RoleId  get; set; 

        public List Roles  get; set; 
        

Tu vista

    
@Html.LabelFor(model => model.RoleId, htmlAttributes: new @class = "col-form-label" )
@Html.DropDownListFor(model => model.RoleId, Model.Roles, "--Select Role--", new @class = "form-control" ) @Html.ValidationMessageFor(model => model.RoleId, "", new @class = "text-danger" )

Tu acción posterior

    [HttpPost, ValidateAntiForgeryToken]
    public async Task Register(RegistrationViewModel model)
    {
        if (ModelState.IsValid)
        {
            var _roleId = model.RoleId, 

MVC 6 Será un poco diferente

Obtener acción

public async Task Register()
    
        var _roles = new List();
        _roles.Add(new SelectListItem
        
           Text = "Select",
           Value = ""
        );
        foreach (var role in GetRoles())
        
          _roles.Add(new SelectListItem
          
            Text = z.Name,
            Value = z.Id
          );
        

        var model = new RegistrationViewModel
        
            Roles = _roles
        ;

        return View(model);
    

Tu Ver modelo será igual que MVC 5

Tu Vista será como


Correo también será igual

Páginas de afeitar

Tu modelo de página

[BindProperty]
public int User User  get; set;  = 1;

public List Roles  get; set; 

public void OnGet()

    Roles = new List 
        new SelectListItem  Value = "1", Text = "X" ,
        new SelectListItem  Value = "2", Text = "Y" ,
        new SelectListItem  Value = "3", Text = "Z" ,
   ;



Espero que pueda ayudar a alguien 🙂

Puedes animar nuestra labor añadiendo un comentario o valorándolo te damos las gracias.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 5)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *