Wie DropDownList SelectedValue in Controller in MVC abgerufen wird

Ich habe eine Dropdown-Liste, die ich aus der database ausgefüllt habe. Jetzt muss ich den ausgewählten Wert im Controller ein wenig manipulieren. Aber nicht die Idee. Code den ich ausprobiert habe.

Modell

public class MobileViewModel { public List MobileList; public SelectList Vendor { get; set; } } 

Regler

  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); } 

Aussicht

  
Mobile Manufacured @Html.DropDownList("ddlVendor", Model.Vendor, "Select Manufacurer")

   

1. Ansatz (über Request oder FormCollection):

Sie können es aus Request mit Request.Form lesen, Ihr Dropdown-Name ist ddlVendor also übergeben ddlVendor Schlüssel ddlVendor in der FormCollection, um den Wert zu erhalten, der von form gepostet wird:

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

oder verwenden Sie FormCollection :

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

2. Ansatz (über Modell):

Wenn Sie mit der Modellbindung arbeiten möchten, fügen Sie eine Eigenschaft in Model hinzu:

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

und in Sicht:

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

und in Aktion:

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

AKTUALISIEREN:

Wenn Sie den Text des ausgewählten Artikels ebenfalls posten möchten, müssen Sie ein verstecktes Feld hinzufügen und bei der Dropdown-Auswahl ändern Sie den ausgewählten Artikeltext im versteckten Feld:

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

benutze jquery um verstecktes Feld zu setzen:

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

Modell

Sehr einfaches Modell mit Genderfeld. GetGenderSelectItems() gibt ausgewählte Elemente zurück, die zum Auffüllen von DropDownList benötigt werden.

 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" }; } } 

Aussicht

@Html.DropDownListFor Sie sicher, dass Sie Ihre @Html.DropDownListFor in einem Formular-Tag verpackt haben.

 @model MyModel @using (Html.BeginForm("MyController", "MyAction", FormMethod.Post) { @Html.DropDownListFor(m => m.Gender, MyModel.GetGenderSelectItems())  } 

Regler

Der Name Ihrer .cshtml-Razor-Ansicht sollte mit dem Namen der Controller-Aktion Views\MyController\MyAction.cshtml sollte mit dem Controller-Namen übereinstimmen, z. B. 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); } } 

Weitergehen

Jetzt machen wir es stark typisiert und enum unabhängig:

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

Wenn Sie etwas Leichtes suchen, würde ich einen Parameter an Ihre Aktion anhängen.

 [HttpPost] public ActionResult ShowAllMobileDetails(MobileViewModel MV, string ddlVendor) { string strDDLValue = ddlVendor; // Of course, this becomes silly. return View(MV); } 

Was jetzt in Ihrem Code passiert, ist, dass Sie das erste String-Argument von “ddlVendor” an Html.DropDownList und das MVC-Framework Html.DropDownList , ein -Element mit dem name “ddlVendor” zu erstellen. Wenn der Benutzer das Formular clientseitig übermittelt, enthält er einen Wert für diesen Schlüssel.

Wenn MVC versucht, diese Anforderung in MV zu analysieren, sucht es nach MobileList und Vendor und findet sie auch nicht, daher wird sie nicht aufgefüllt. Wenn Sie diesen Parameter hinzufügen oder mithilfe von FormCollection eine andere Antwort vorschlagen, fordern Sie MVC auf, speziell nach einem Formularelement mit diesem Namen zu suchen. FormCollection sollte es den Parameterwert mit dem gebuchten Wert auffüllen.

Verwenden Sie SelectList, um @HtmlDropdownListFor zu binden und den Parameter selectedValue darin anzugeben.

http://msdn.microsoft.com/en-us/library/dd492553(v=vs.108).aspx

Beispiel: Sie können das tun, um Venderid zu bekommen

 @Html.DropDownListFor(m => m.VendorId,Model.Vendor) public class MobileViewModel { public List MobileList; public SelectList Vendor { get; set; } public int VenderID{get;set;} } [HttpPost] public ActionResult Action(MobileViewModel model) { var Id = model.VenderID; 

Ich hatte das gleiche Problem in asp.net Rasierapparat C #

Ich hatte eine ComboBox gefüllt mit Titeln aus einer EventMessage , und ich wollte den Inhalt dieser Nachricht mit dem ausgewählten Wert TextField , um ihn in einem Label oder TextField oder einem anderen Control TextField

Meine ComboBox war folgendermaßen gefüllt:

  @Html.DropDownList("EventBerichten", new SelectList(ViewBag.EventBerichten, "EventBerichtenID", "Titel"), new { @class = "form-control", onchange = "$(this.form).submit();" }) 

In meinem EventController ich eine function, um zu der Seite zu gehen, auf der ich meine ComboBox zeigen ComboBox (welche von einem anderen Modelltyp ist, also musste ich eine Teilansicht verwenden)?

Die function, um von Index zu Seite zu gelangen, in der die Teilansicht geladen werden soll:

  public ActionResult EventDetail(int id) { Event eventOrg = db.Event.Include(s => s.Files).SingleOrDefault(s => s.EventID == id); // EventOrg eventOrg = db.EventOrgs.Find(id); if (eventOrg == null) { return HttpNotFound(); } ViewBag.EventBerichten = GetEventBerichtenLijst(id); ViewBag.eventOrg = eventOrg; return View(eventOrg); } 

Die function für die Teilansicht ist hier:

  public PartialViewResult InhoudByIdPartial(int id) { return PartialView( db.EventBericht.Where(r => r.EventID == id).ToList()); } 

Die function um EventBerichten zu füllen:

  public List GetEventBerichtenLijst(int id) { var eventLijst = db.EventBericht.ToList(); var berLijst = new List(); foreach (var ber in eventLijst) { if (ber.EventID == id ) { berLijst.Add(ber); } } return berLijst; } 

Das partielleView-Modell sieht folgendermaßen aus:

 @model IEnumerable  @foreach (var item in Model) {  } 
EventID Titel Inhoud BerichtDatum BerichtTijd
@Html.DisplayFor(modelItem => item.EventID) @Html.DisplayFor(modelItem => item.Titel) @Html.DisplayFor(modelItem => item.Inhoud) @Html.DisplayFor(modelItem => item.BerichtDatum) @Html.DisplayFor(modelItem => item.BerichtTijd)

VIEUW : Dies ist das Skript, um meine Ausgabe in der Ansicht zu erhalten

  @{ Html.RenderAction("InhoudByIdPartial", Model.EventID); } 
Berichten over dit Evenement
@Html.DropDownList("EventBerichten", new SelectList(ViewBag.EventBerichten, "EventBerichtenID", "Titel"), new { @class = "form-control", onchange = "$(this.form).submit();" })

Danke – das half mir, besser zu verstehen und ein Problem zu lösen, das ich hatte. Die JQuery, die zur Verfügung gestellt wurde, um den Text von selectedItem zu bekommen, hat NICHT für mich gearbeitet, ich habe es geändert in

 $(function () { $("#SelectedVender").on("change", function () { $("#SelectedvendorText").val($(**"#SelectedVender option:selected"**).text()); }); }); 

Wenn Sie @Html.DropDownList verwenden @Html.DropDownList , folgen Sie.

Regler:

 var categoryList = context.Categories.Select(c => c.CategoryName).ToList(); ViewBag.CategoryList = categoryList; 

Aussicht:

 @Html.DropDownList("Category", new SelectList(ViewBag.CategoryList), "Choose Category", new { @class = "form-control" }) $("#Category").on("change", function () { var q = $("#Category").val(); console.log("val = " + q); });