Hey, ich arbeite an einem Helpdesk in MVC2, und ich habe ein Problem mit Daten, die nicht aus meinen Ansichten über meine ViewModels übertragen werden.Warum werden in meinem ViewModel keine Daten übertragen?
Auf der Startseite habe ich drei DropDownLists, aus denen Sie einen Problembereich auswählen können. Sie können dann eine Taste drücken, um entweder ein Problem zu melden oder die FAQ aufzurufen. Wenn Sie einen Problembereich in den DropDownLists auswählen, sollte sich die Site daran erinnern, was Sie ausgewählt haben, indem Sie die Datenübertragung mit dem Viewmodel durchführen.
Aber wenn ich zu der Post-Methode für den Home-Index komme, sind meine SelectLists und SelectListItems null, während die Zeichenfolge für die Schaltfläche Info die richtigen Daten enthält.
Was mache ich falsch?
Dies ist meine Heimat Controller:
public ActionResult Index()
{
var viewModel = new HomeIndexViewModel()
{
// The lists with problem areas are populated.
problemAreas1 = new SelectList(helpDeskRepository.GetProblemAreas(), "ProblemAreaID", "ProblemAreaName"),
problemAreas2 = new SelectList(helpDeskRepository.GetProblemAreas(), "ProblemAreaID", "ProblemAreaName"),
problemAreas3 = new SelectList(helpDeskRepository.GetProblemAreas(), "ProblemAreaID", "ProblemAreaName")
};
return View(viewModel);
}
//
// POST: /Home/
[HttpPost]
public ActionResult Index(HomeIndexViewModel viewModel)
{
// snip
}
Meine Viewmodel:
public class HomeIndexViewModel
{
// A SelectList containing elements for the DropDownLists in the Home "Index" view.
public SelectList problemAreas1 { get; set; }
public SelectList problemAreas2 { get; set; }
public SelectList problemAreas3 { get; set; }
// Items chosen in the DropDownLists.
public SelectListItem itemOne { get; set; }
public SelectListItem itemTwo { get; set; }
public SelectListItem itemThree { get; set; }
// String for IDing what button is pressed.
public string submitButton { get; set; }
}
Und Ansicht meiner Heimat Index (die von HomeIndexViewModel erbt, ich den Code nicht enthalten, nur weil es vermasselt die post):
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<% using (Html.BeginForm("Index", "Home", FormMethod.Post))
{%>
<h2>
Search for your problem:</h2>
<asp:Label ID="Label1" runat="server" Width="300px">
Choose a problem area, and search for an answer to your problem in the FAQ,
or you can press the report button to report your problem.</asp:Label>
<%-- Here are the DropDownLists. --%>
<p style="width: 220px; height: 24px;">
<%: Html.DropDownListFor(model => Model.itemOne, Model.problemAreas1, "Choose a problem area")%>
</p>
<p style="width: 220px;">
<%: Html.DropDownListFor(model => Model.itemTwo, Model.problemAreas2, "Choose a problem area")%>
</p>
<p style="width: 220px">
<%: Html.DropDownListFor(model => Model.itemThree, Model.problemAreas3, "Choose a problem area")%>
</p>
<p>
<%-- Here are the two buttons allowing people to do a search or create a new ticket respectively. --%>
<input type="submit" value="Search for problems" name="submitButton" id="searchButton" />
<input type="submit" value="Report problem" name="submitButton" id="submitButton" />
</p>
<%} %>
Vielen Dank für Ihre Zeit. :-)
Ja, das ist was ich vermisst habe. String-Werte, Int-Werte, Guid-Werte oder einer der Value-Typen. –
So hatte ich es, bevor ich meine DropDownLists in DropDownListFor änderte. Wenn ich Zeichenketten benutze und die Taste zum Durchsuchen der FAQ drücke (das Setup für die Listen ist dasselbe wie bei meiner Home-Indexansicht), bekomme ich folgende Ausnahme: Das ViewData-Objekt mit dem Schlüssel 'itemOne' ist vom Typ 'System. String 'muss aber vom Typ' IEnumerable 'sein. Aus diesem Grund habe ich sie in SelectListItems in erster Linie geändert. –
KasMA1990
Warte, vergiss es. Ich habe meine DropDownLists im FAQ-Controller nicht gefüllt. Danke für die Hilfe, es funktioniert jetzt. :-) – KasMA1990