Ich benutze die Modellbinder-Funktionalität von asp.net, um Formularwerte an meine Entität zu binden, wenn Sie aus einer Ansicht veröffentlichen.Dropdown-Wert null bei Verwendung von Viewmodel & Modelbinder in asp.net mvc
Das HTML rendert korrekt in der anfänglichen Ansicht mit korrekten Options- und Wertelementen.
Beim Ausfüllen des Formulars und der Buchung werden alle Werte korrekt in die Entität eingetragen, mit Ausnahme des Werts aus der Dropdown-Liste. nicht sicher, was ich falsch mache.
Code unten angehängt:
Kunden Entity:
public class Customer : EntityBase
{
public virtual string Name { get; set; }
public virtual string Email { get; set; }
public virtual string Mobile { get; set; }
public virtual Store LocalStore { get; set; }
public virtual DateTime? DateOfBirth { get; set; }
public Customer(){}
public Customer(string name, string email, string mobile, Store localStore):this(name, email, mobile, localStore, null)
{
}
public Customer(string name, string email, string mobile, Store localStore, DateTime? dateOfBirth)
{
Name = name;
Email = email;
Mobile = mobile;
LocalStore = localStore;
DateOfBirth = dateOfBirth;
}
}
Ansichtsmodell:
public class CustomerViewModel {
// Properties
private IStoreRepository _StoreRepository;
public Customer Customer { get; private set; }
public SelectList Stores { get; private set; }
// Constructor
public CustomerViewModel(IStoreRepository storeRepository, Customer customer)
{
_StoreRepository = storeRepository;
Customer = customer;
Stores = new SelectList(_StoreRepository.GetAllStores(), "Id", "Name", Customer.LocalStore.Id);
}
}
Controller:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create([Bind(Prefix="")]Customer customer)
{
return View(new CustomerViewModel(_StoreRepository, customer));
}
Ausblick:
<%@ Import Namespace="BlackDiamond.Buzz.MVCWeb.Controllers"%>
<%@ Import Namespace="BlackDiamond.Buzz.Core"%>
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<CustomerViewModel>" %>
<%
Customer customer = ViewData.Model.Customer;
using (Html.BeginForm())
{
%>
<table>
<tr>
<td>Local Store:</td>
<td><%= Html.DropDownList("LocalStore", ViewData.Model.Stores)%></td>
</tr>
<tr>
<td>Name:</td><td><%= Html.TextBox("Name", customer.Name)%></td>
</tr>
<tr>
<td>Email:</td><td><%= Html.TextBox("Email", customer.Email)%></td>
</tr>
<tr>
<td>Mobile:</td><td><%= Html.TextBox("Mobile", customer.Mobile)%></td>
</tr>
</table>
<input type="submit" value="Create" />
<%}%>
Danke für den Beitrag. Das Problem war in der Tat der LocalStore-Wert, der ein Objekt vom Typ Store im Gegensatz zu einer String-Guid ist. Musste einen benutzerdefinierten Modelbinder erstellen, um den richtigen Store mithilfe der GUID-ID zu erhalten. Nochmals vielen Dank für die Post –