Cómo obtener DropDownList SelectedValue en el controlador en MVC
Tengo una lista desplegable, que completé desde la base de datos. Ahora necesito obtener el valor seleccionado en el Controlador y realizar alguna manipulación. Pero no entiendo la idea. Código que he probado.
Modelo
public class MobileViewModel
{
public List<tbInsertMobile> MobileList;
public SelectList Vendor { get; set; }
}
Controlador
public ActionResult ShowAllMobileDetails()
{
MobileViewModel MV = new MobileViewModel();
MV.MobileList = db.Usp_InsertUpdateDelete(null, "", "", null, "", 4, MergeOption.AppendOnly).ToList();
MV.Vendor = new SelectList(db.Usp_VendorList(), "VendorId", "VendorName");
return View(MV);
}
[HttpPost]
public ActionResult ShowAllMobileDetails(MobileViewModel MV)
{
string strDDLValue = ""; // Here i need the dropdownlist value
return View(MV);
}
Vista
<table>
<tr>
<td>Mobile Manufacured</td>
<td>@Html.DropDownList("ddlVendor", Model.Vendor, "Select Manufacurer") </td>
</tr>
<tr>
<td>
</td>
<td>
<input id="Submit1" type="submit" value="search" />
</td>
</tr>
</table>
1er enfoque (a través de Solicitud o FormCollection):
Puede leerlo Request
usando Request.Form
, su nombre desplegable es, ddlVendor
por lo tanto, pase ddlVendor
la clave en formCollection para obtener el valor que se publica en el 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 vincular el modelo, agregue una propiedad en el modelo:
public class MobileViewModel
{
public List<tbInsertMobile> 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<tbInsertMobile> MobileList;
public SelectList Vendor { get; set; }
public string SelectVendor {get;set;}
public string SelectedvendorText { get; set; }
}
use jquery para configurar el campo oculto:
<script type="text/javascript">
$(function(){
$("#SelectedVendor").on("change", function {
$("#SelectedvendorText").val($(this).text());
});
});
</script>
@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<SelectListItem> GetGenderSelectItems()
{
yield return new SelectListItem { Text = "Male", Value = "Male" };
yield return new SelectListItem { Text = "Female", Value = "Female" };
}
}
Vista
Asegúrese de envolverlo @Html.DropDownListFor
en una etiqueta de formulario.
@model MyModel
@using (Html.BeginForm("MyController", "MyAction", FormMethod.Post)
{
@Html.DropDownListFor(m => m.Gender, MyModel.GetGenderSelectItems())
<input type="submit" value="Send" />
}
Controlador
El nombre de su 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 Views\MyController\MyAction.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 y enumerado independiente:
var genderSelectItems = Enum.GetValues(typeof(Gender))
.Cast<string>()
.Select(genderString => new SelectListItem
{
Text = genderString,
Value = genderString,
}).AsEnumerable();