MVC3 asp.net Fehler: der Wert darf nicht null sein. Parameter-name: Elemente auf dropdownlist
Ich bin immer ein dump NUR auf dem server und nicht in meinem lokalen system, wenn Sie versuchen um die Daten zu veröffentlichen. Gibt es eine Seite, die sendet einen Wert an die Datenbank. Ich habe auch modelliert, die in der dropdown-Liste Seite als verbindlich. Jedoch, wenn Sie klicken auf "Erstellen", anstatt einen Fehler wie "Missing"; er wirft einen dump.
Dump trace:
Value cannot be null.
Parameter name: items
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.ArgumentNullException: Value cannot be null.
Parameter name: items
Source Error:
Line 65: </div>
Line 66: <div class="editor-field">
Line 67: @Html.DropDownListFor(x => x.ProjectName, new SelectList(Model.ProjectDetail, "ProjectName", "ProjectName"),"")
Line 68: <span runat="server" style="color:Red;" visible="false"> *</span>
Line 69: @Html.ValidationMessageFor(model => model.ProjectName)
Source File: d:\hosting\11178048\html\fbpm\fbpm\Views\User\Create.cshtml Line: 67
Stack Trace:
[ArgumentNullException: Value cannot be null. Parameter name: items] System.Web.Mvc.MultiSelectList..ctor(IEnumerable items, String dataValueField, String dataTextField, IEnumerable selectedValues)
+289714 System.Web.Mvc.SelectList..ctor(IEnumerable items, String dataValueField, String dataTextField) +19 ASP._Page_Views_User_Create_cshtml.Execute() in d:\hosting\11178048\html\fbpm\fbpm\Views\User\Create.cshtml:67 System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +197 System.Web.Mvc.WebViewPage.ExecutePageHierarchy() +81 System.Web.WebPages.StartPage.RunPage() +17
Den Controller-code:
public ActionResult Create()
{
var model = new UserDetail
{
ProjectDetail = db1.ProjectDetails.ToList()
};
return View(model);
}
//
//POST: /User/Create
[HttpPost]
public ActionResult Create(UserDetail userdetail)
{
if (ModelState.IsValid)
{
db.UserDetails.Add(userdetail);
db.SaveChanges();
return RedirectToAction("SearchCust");
}
return View(userdetail);
}
Den anzeigen-code:
@model fbpm.Models.UserDetail
@{
ViewBag.Title = "Create Customer";
}
<h2>Create Customer</h2>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Customer Detail</legend>
<div id ="left" style="float:left; width:400px;">
<div class="editor-label">
@Html.LabelFor(model => model.UserID)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.UserID)
<span runat="server" style="color:Red;" visible="false"> *</span>
@Html.ValidationMessageFor(model => model.UserID)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Password)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Password)
<span runat="server" style="color:Red;" visible="false"> *</span>
@Html.ValidationMessageFor(model => model.Password)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.UserName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.UserName)
@Html.ValidationMessageFor(model => model.UserName)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.PANNo)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.PANNo)
@Html.ValidationMessageFor(model => model.PANNo)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.EmailID)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.EmailID)
@Html.ValidationMessageFor(model => model.EmailID)
</div>
<br />
<p>
<input type="submit" value="Create Customer" />
</p>
</div>
<div id = "left3" style="float:left; width:400px">
<div class="editor-label">
@Html.LabelFor(model => model.ProjectName)
</div>
<div class="editor-field">
@Html.DropDownListFor(x => x.ProjectName, new SelectList(Model.ProjectDetail, "ProjectName", "ProjectName"),"")
<span runat="server" style="color:Red;" visible="false"> *</span>
@Html.ValidationMessageFor(model => model.ProjectName)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.BookedDate)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.BookedDate)
<span runat="server" style="color:Red;" visible="false"> *</span>
@Html.ValidationMessageFor(model => model.BookedDate)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.BookedAmount)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.BookedAmount)
<span runat="server" style="color:Red;" visible="false"> *</span>
@Html.ValidationMessageFor(model => model.BookedAmount)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Contact1)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Contact1)
@Html.ValidationMessageFor(model => model.Contact1)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Contact2)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Contact2)
@Html.ValidationMessageFor(model => model.Contact2)
</div>
</div>
<div id="left1" style="float:left; width:400px;">
<div class="editor-field">
@Html.HiddenFor(model => model.Role, new { @readonly = "readonly", @Value = "400" })
@Html.ValidationMessageFor(model => model.Role)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.FullAddress)
</div>
<div class="editor-field">
@Html.TextAreaFor(model => model.FullAddress)
@Html.ValidationMessageFor(model => model.FullAddress)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.State)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.State)
@Html.ValidationMessageFor(model => model.State)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Country)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Country)
@Html.ValidationMessageFor(model => model.Country)
</div>
</div>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "SearchCust")
</div>
Ich suchte eine Menge im Netz und fand, dass das hinzufügen einer viewbag für den Namen des Projekts in der submit-Aktion vor der Rückkehr der Blick owuld helfen; aber es nicht. Bitte kann mir jemand helfen?
Hinsichtlich
InformationsquelleAutor Hariprasauth Ramamoorthy | 2013-06-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich nehme an, Sie sehen nur diese Ausnahme, wenn Sie Ihre insert schlägt fehl; Sie versuchen dann, die Wiederverwendung der
UserDetail
Modell in der Ansicht für die gleiche Seite.Den Fehler, den Sie sehen, ist aufgrund der Natur der Arbeit mit HTTP - etwas, das nicht direkt gebunden ist an einen Eingang ist nicht beibehalten. Also, wenn Sie versuchen, den Wiederaufbau der Ansicht, die Liste, die Sie versuchen, binden Sie das drop-down-Helfer ist null, da
UserDetail.ProjectDetail
wurde nicht neu besiedelt. Sie können dieses Problem beheben, etwa so:De nada. Wenn Sie das neue MVC, finden Sie vielleicht die NerdDinner tutorial nützliche: wrox.com/WileyCDA/Section/id-321793.html. Ansonsten ist dies das beste Buch, das ich gefunden habe: amazon.com/Pro-ASP-NET-MVC-Adam-Freeman/dp/1430242361.
Der modelbinder nimmt diese Werte und versucht Sie bis zu Eigenschaften, die in der model-Klasse, wenn ein Modell verwendet wird, in der Handlung-Erklärung.
Wenn ich verstehe, was du fragst, dann ja. In der ersten Seite laden (die GET-action), die ProjectName-Eigenschaft wird aufgefüllt. Diese Werte sind nicht durchgeführt durch die POST-Aktion (wenn das Formular abgeschickt wird), da Sie nicht gebunden sind, um ein Formular-element.
Die neueste version scheint zu sein, MVC4 (nerddinner.codeplex.com/SourceControl/latest#mvc4), aber der Prozess nicht viel ändern. Abgesehen von einem Wechsel zu Razor, die meisten Unterschiede sind wohl Kosmetik. Ansonsten, der Amazon link, den ich auch ist für eine MVC4-version von einem ziemlich anständigen Apress Buch über das Thema. Die eBook-version ist ein wenig billiger: apress.com/9781430242369
InformationsquelleAutor Tieson T.
Ich merkte, dass create-button ist ein submit-button
Also muss es call-Aktion mit HttpPost-Attribut
[HttpPost]
public ActionResult Create(UserDetail userdetail)
In dieser Aktion, es gibt Anzeigen(userdetail);
Aber das userdetail-Objekt wird erstellt, indem binder Modell aus der übermitteln von Daten vom browser.
Also wird es nicht Werte in ProjectDetail Eigenschaft.
Können Sie Schritt für Schritt durch
Ich meine, Sie müssen legen Sie einen Haltepunkt in [HttpPost] public ActionResult Create(UserDetail userdetail) um zu überprüfen, ob es hat Wert für ProjectDetail. Wenn nicht, solltest du neu laden ProjectDetail in die Handlung.
Ok. Eigentlich ist der dump kommt nur in den server. Können Sie mir bitte sagen, wie kann ich laden Sie es in dieser Aktion?
verwenden Sie einfach ProjectDetail = "db1".ProjectDetails.ToList()
InformationsquelleAutor flyfrog