Ich kann nicht scheinen, den Wert einer Auswahlliste zu erhalten, um den Wert des Elternobjekts aufzufüllen. Ich verwende ein Wrapper-Objekt zum Binden, damit ich Zugriff auf die Werte habe, die für die SelectList benötigt werden, sowie auf das Objekt, das den Wert benötigt. Ich wette, ich vermisse etwas Grundlegendes, aber ich kann es nicht finden.Suchlisten mit NHibernate und ASP.Net MVC
Ich habe diese Modelle:
public class Status
{
public virtual int Id { get; protected set; }
public virtual string Name { get; set; }
public virtual bool IsClosed { get; set; }
public override string ToString()
{
return Name;
}
}
public class Issue
{
public virtual int Id { get; protected set; }
public virtual string Title { get; set; }
public virtual string Description { get; set; }
public virtual Status Status { get; set; }
public virtual DateTime CreatedOn { get; set; }
public virtual DateTime UpdatedOn { get; set; }
}
Und ein FormViewModel (von NerdDinner Beispiele), die Liste der Status enthalten
public class IssueFormViewModel
{
public Issue Issue { get; set; }
public SelectList Statuses { get; set; }
public IssueFormViewModel(Issue issue, IList<Status> statuses)
{
Issue = issue;
Statuses = new SelectList(statuses, "Id", "Name", statuses[1].Id);
}
public IssueFormViewModel() { }
}
Aktionen auf dem Controller-Look Mein wie ...
public ActionResult Create()
{
IList<Status> statuses;
Issue issue = new Issue();
// NHibernate stuff getting a List<Status>
return View(new IssueFormViewModel(issue,statuses));
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(IssueFormViewModel issueFormView)
{ // At this point issueFormView.Issue.Status == null
// ...
}
Mein Issue-Objekt ist teilweise gebunden, mit Ausnahme des Status, in dem diese Namen verwendet werden die Aussicht:
<p>
<label for="Issue.Title">Title:</label>
<%= Html.TextBox("Issue.Title", Model.Issue.Title)%>
<%= Html.ValidationMessage("Title", "*") %>
</p>
<p>
<label for="Statuses">Status:</label>
<!-- also tried "Issue.Status" -->
<%= Html.DropDownList("Statuses", Model.Statuses)%>
<%= Html.ValidationMessage("Status", "*")%>
</p>
Guter Fang, aber ich bekam keine OutOfBounds Ausnahme. Ich garantierte, dass ich mehr als einen Wert zum Testen hatte. – hometoast