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.