Ich habe diese sehr einfache MVC erstellt / generiertProgramm (1 Minute) sind die Schritte 1. Erstellen Sie das MVC5-Asp-Programm und erstellen Sie eine neue Modellklasse - das Testmodell 2. Gehen Sie zum Controller add -> scaffold und geben Sie das Modell und die Kontextklasse an.
Die Rohoperation wurde erzeugt und allesfunktioniert gut Was ich jetzt möchte, ist, dass, wenn der Benutzer auf "Erstellen in dem Geschlecht" klickt, er eine Dropdown-Liste hat, die er auswählen kann, ich diesen Code schreibe, den ich aus dem vorherigen Beitrag habe, und ich habe einen Dump in der HTML-Dropdown-Liste, was bin ich fehlt hier?
das Model
using System.Collections.Generic;
using System.Data.Entity;
using System.Web.Mvc;
namespace TestropDownCreate.Models
{
public class TestModel
{
public int ID { get; set; }
public string Name { get; set; }
public string SelectedGender { get; set; }
public IEnumerable<SelectListItem> Gender
{
get
{
return new[]
{
new SelectListItem {Value = "M", Text = "Male"},
new SelectListItem {Value = "F", Text = "Female"}
};
}
}
}
public class TestModelDBContext : DbContext
{
public DbSet<TestModel> TestModel { get; set; }
}
}
In der vom Gerüst generierten Ansicht können Sie sehen, dass ich den generierten Code kommentiere und den setze @ Html.DropDownListFür was den Dump verursachen, wie soll ich ihn lösen.
@model TestropDownCreate.Models.TestModel
@{
ViewBag.Title = "Create";
}
<h2>Create</h2>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>TestModel</h4>
<hr />
@Html.ValidationSummary(true)
<div class="form-group">
@Html.LabelFor(model => model.Name, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.SelectedGender, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.SelectedGender, Model.Gender)
@*@Html.EditorFor(model => model.SelectedGender)
@Html.ValidationMessageFor(model => model.SelectedGender)*@
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
Antworten:
0 für die Antwort № 1Ich würde einen kühnen Vorschlag machen, der auf der Erfahrung basiert, dass Sie einen bekommen ArgumentNullException
Ausnahme, weil der Wert von SelectedGender
wurde nicht eingestellt. Also, was passiert ist, dass hier ...
@Html.DropDownListFor(model => model.SelectedGender, Model.Gender)
asp.net versucht, die Dropdown-Liste mit einem bestimmten Wert vorzuwählen, und dazu wird der Wert von angezeigt SelectedGender
und versucht, es mit einem der in angegebenen Werte abzugleichen Gender
Es ist jedoch nichts festgelegt SelectedGender
weil es null ist. Um dieses Problem zu beheben, können Sie zwei Ansätze verfolgen:
initialisieren
SelectedGender
mit einem Standardwert, der einem der in angegebenen Werte entsprichtGender
... entweder M oder F.Initialisieren
SelectedGender
mit einem Dummy-Standardwert wie einer leeren Zeichenfolge, fügen Sie dann einen Standardwert hinzuGender
wie nachstehend...public IEnumerable<SelectListItem> Gender { get { return new[] { new SelectListItem {Value = "", Text = "--Select a gender--"}, new SelectListItem {Value = "M", Text = "Male"}, new SelectListItem {Value = "F", Text = "Female"} }; } }
Ein Vorschlag, auf den Jhoon in einem Kommentar hingewiesen hat, dass Sie die Geschlechterwerte nicht wirklich in der Datenbank behalten müssen, aber ich verstehe, dass dies nicht im Rahmen Ihrer Frage liegt