Get the selected value of a DropDownList. Asp.NET MVC
77,781
Solution 1
In HTML a dropdown box sends only simple scalar values. In your case that would be the id of the selected book:
@Html.DropDownList("selectedBookId", (SelectList)ViewBag.Books)
and then adapt your controller action so that you will retrieve the book from the id that gets passed to your controller action:
[Authorize]
[HttpPost]
public ActionResult Action(string selectedBookId)
{
if (ValidateFields()
{
Book book = FetchYourBookFromTheId(selectedBookId);
var data = GetDatasAboutBookSelected(book);
ViewBag.Data = data;
return View();
}
return View();
}
Solution 2
You can use DropDownListFor as below, It so simpler
@Html.DropDownListFor(m => m.Id, new SelectList(Model.Books,"Id","Name","1"))
(You need a strongly typed view for this -- View bag is not suitable for large lists)
public ActionResult Action(Book model)
{
if (ValidateFields()
{
var Id = model.Id;
...
I think this is simpler to use.
Author by
Azzedine Hassaini
Updated on July 12, 2022Comments
-
Azzedine Hassaini almost 2 years
I'm trying to populate a DropDownList and to get the selected value when I submit the form:
Here is my model :
public class Book { public Book() { this.Clients = new List<Client>(); } public int Id { get; set; } public string JId { get; set; } public string Name { get; set; } public string CompanyId { get; set; } public virtual Company Company { get; set; } public virtual ICollection<Client> Clients { get; set; } }
My Controllers :
[Authorize] public ActionResult Action() { var books = GetBooks(); ViewBag.Books = new SelectList(books); return View(); } [Authorize] [HttpPost] public ActionResult Action(Book book) { if (ValidateFields() { var data = GetDatasAboutBookSelected(book); ViewBag.Data = data; return View(); } return View(); }
My Form :
@using (Html.BeginForm("Journaux","Company")) { <table> <tr> <td> @Html.DropDownList("book", (SelectList)ViewBag.Books) </td> </tr> <tr> <td> <input type="submit" value="Search"> </td> </tr> </table> }
When I click, the parameter 'book' in the Action is always null. What am I doing wrong?
-
Azzedine Hassaini about 11 yearsI have another question about that. In fact, the DropDownList selected value returns the value of the
ToString()
method ofBook
. So I have to put the Ids in my DropDownList, but I would like the list to display the title and the selected value to be the Id. Is there a way to do that? For now, I use this way : theToString()
method returns "Id - Title" and I useSubString()
to keep only the Id. But I would like the DropDownList to display only the Title without the Id. -
Darin Dimitrov about 11 yearsThe
SelectList
class that you are passing to the DropDown is anIEnumerable<SelectListItem>
whereSelectListItem
has 2 properties:Value
andText
. You could set theValue
to theId
of your Book instance and theText
to whatever format you want. -
StepUp over 9 years@Darin Dimitrov, It's tremendous! That is what I would like to do! You are the wizard:).