quindi voglio per creare una visualizzazione riutilizzabile per la modifica di un indirizzo, numero di telefono, eccMVC4 Parziale vista non caricando i valori nel modello "contenitore" sul palo
ho messa a punto di un modello di contenitore che contiene tutte le Modelli necessari creato una vista parziale per gestire la parte Indirizzo di Th forma
e Ma quando il postback al controller, i dati dei clienti è là dalla pagina principale, ma nulla dalle viste parziali non c'è (usando MVC4/Razor)
Container Modello
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);
}
Vista principale:
@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>
}
.....
Indirizzo Parziale Vista:
@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>
Che cosa sto facendo di sbagliato qui - perché non posso ottenere il modello popolato dalle viste parziali?
Se si è risposto a questa domanda, si prega di fornire una risposta (SOTTO) e accettarla in modo che la domanda sia contrassegnata Risposta. – kingdango
@Nayt, kingdango ha ragione. Sposta la parte della domanda contrassegnata come "RISOLTO" come una nuova risposta di seguito. Dopo averlo fatto, contrassegnarlo come risposta accettata. Un risultato interessante è che altri potrebbero trovare utile anche la tua risposta; se lo fanno, inviteranno la tua risposta, che è una delle cose divertenti della partecipazione a questo sito. –
Penso che faresti meglio ad usare un EditorTemplate per il tipo di indirizzo qui. Questo ti eviterà un sacco di problemi quando manterrai il tuo codice in futuro. –