Mein Modell ist wie folgt:auf Post, eine Dropdown-Liste SelectList.SelectedValue ist null
public class testCreateModel
{
public string s1 { get; set; }
public SelectList DL { get; set; }
public testCreateModel()
{
Dictionary<string, string> items = new Dictionary<string, string>();
items.Add("1", "Item 1");
items.Add("2", "Item 2");
DL = new SelectList(items, "Key", "Value");
}
}
Meine Einleitung von Maßnahmen ist:
public ActionResult testCreate()
{
testCreateModel model = new testCreateModel();
return View(model);
}
Mein Razor Ansicht (irrelevante Teile gestrichen) ist:
@model Tasks.Models.testCreateModel
@using (Html.BeginForm()) {
<fieldset>
<legend>testCreateModel</legend>
<div class="editor-label">
@Html.LabelFor(model => model.s1)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.s1)
</div>
<div class="editor-label">
Select an item:
</div>
<div class="editor-field">
@Html.DropDownList("dropdownlist", (SelectList)Model.DL)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
Die Post zurück Aktion:
Auf Post zurück, ist model.DL.SelectedValue null. (Das ausgewählte Element kann jedoch aus FormCollection abgerufen werden, aber das ist neben dem Punkt). Das DL-Objekt noch richtig sonst bevölkert, Direkt-Fenster wie folgt ausgegeben:
model.DL
{System.Web.Mvc.SelectList}
base {System.Web.Mvc.MultiSelectList}: {System.Web.Mvc.SelectList}
SelectedValue: null
model.DL.Items
Count = 2
[0]: {[1, Item 1]}
[1]: {[2, Item 2]}
model.DL.SelectedValue
null
Q1: Wie kann ich die Verwendung der SelectedValue Eigenschaft machen statt?
Wenn nun in der Razor Ansicht, die ich den Namen des HTML-SELECT-Tages DL (dh gleich den Eigenschaftsnamen im Modell) ändern:
@Html.DropDownList("DL", (SelectList)Model.DL)
Ich erhalte eine Ausnahme:
No parameterless constructor defined for this object.
Stack Trace:
[MissingMethodException: No parameterless constructor defined for this object.]
System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) +0
System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache) +98
System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache) +241
System.Activator.CreateInstance(Type type, Boolean nonPublic) +69
System.Web.Mvc.DefaultModelBinder.CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType) +199
System.Web.Mvc.DefaultModelBinder.BindSimpleModel(ControllerContext controllerContext, ModelBindingContext bindingContext, ValueProviderResult
...
Q2: Warum?
Danke.
Vielen Dank für die vorgeschlagene Methode zur Verwendung einer Dropdown-Liste. Es funktioniert und es wird weniger Arbeit benötigt, um den ausgewählten Wert zu übernehmen! –
Danke, dies ist der beste Beitrag, der mich in Bezug auf die Verwendung von Dropdownliste in mvc –