Deshalb möchte ich zum Bearbeiten einer Adresse, die Telefonnummer ein wiederverwendbares Ansicht erstellen usw.MVC4 Teilansicht nicht Werte in „Container“ Modell auf Post back loading
ich Setup ein Container Modell, das alle enthält die Modelle benötigt. eine Teilansicht Geschaffen, um die Adresse Teil th e Form
Aber wenn es postet zurück an den Controller, Kundendaten gibt es auf der Hauptseite, aber alles, was von den Teilansichten zu handhaben ist nicht da (mit MVC4/Razor)
Container Modell
public class CustomerViewModel {
public Customer CustomerData { get; set; }
public Address MainAddress { get; set; }
public Address ShippingAddress { get; set; }
public Phone MainPhone { get; set; }
public Phone Fax { get; set; }
}
Controller:
public ActionResult Edit(int id = 0) {
CustomerViewModel model = new CustomerViewModel();
model.CustomerData = Customer.FetchById(id);
if (model.CustomerData == null) return HttpNotFound();
//... load addresses, phones
return View(model);
}
[HttpPost]
public ActionResult Edit(CustomerViewModel model) {
if (ModelState.IsValid) {
///... save everything here - model has CustomerData, but nothing else
}
return View(model);
}
Hauptansicht:
@model ProjectName.WebSite.Models.CustomerViewModel
.....
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Customer</legend>
@Html.HiddenFor(model => model.ModelCustomer.CustomerId)
<div class="editor-label">
@Html.LabelFor(model => model.ModelCustomer.CompanyName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.ModelCustomer.CompanyName)
@Html.ValidationMessageFor(model => model.ModelCustomer.CompanyName)
</div>
...
@Html.Partial("Address", Model.MainAddress, new ViewDataDictionary {
TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = "Main" }
})
...
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
.....
Adresse Teilansicht:
@model ProjectName.Business.Address
<fieldset style="margin-top: 20px;">
<legend>@(ViewData["label"] ?? "Address")</legend>
@Html.HiddenFor(model => model.AddressId)
<div class="editor-label">
@Html.LabelFor(model => model.Street)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Street)
@Html.ValidationMessageFor(model => model.Street)
</div>
...
</fieldset>
Was mache ich falsch hier - warum kann ich nicht das Modell aus den Teilansichten bevölkert bekommen?
Wenn Sie diese Frage selbst beantwortet haben, geben Sie bitte eine Antwort (BELOW) an und akzeptieren Sie sie, damit die Frage mit Beantwortet beantwortet wird. – kingdango
@Nayt, Kingdango hat Recht. Bitte verschieben Sie den Teil Ihrer Frage, der mit "SOLVED IT" gekennzeichnet ist, als neue Antwort unten. Bitte markieren Sie dies als akzeptierte Antwort. Ein cooles Ergebnis dabei ist, dass andere Ihre Antwort auch nützlich finden; Wenn sie dies tun, werden sie Ihre Antwort positiv bewerten, was eine der lustigen Seiten der Teilnahme an dieser Website ist. –
Ich denke, Sie sollten besser ein EditorTemplate für den Adresstyp hier verwenden. Dies würde Ihnen viele Probleme bei der zukünftigen Pflege Ihres Codes ersparen. –