por lo que quiero para crear una vista reutilizable para la edición de una dirección, número de teléfono, etc.MVC4 Vista parcial no cargar los valores en el modelo de "contenedor" en segundo palo
I fijó un modelo de contenedor que contiene toda la Modelos necesarios. crea una vista parcial de manejar la parte de dirección de l e forma
Pero cuando se publica de nuevo al controlador, los datos del cliente está allí desde la página principal, pero nada de las vistas parciales no está allí (usando MVC4/Razor)
contenedor de modelos
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; }
}
controlador:
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 principal:
@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>
}
.....
Dirección Vista parcial:
@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>
¿Qué estoy haciendo mal aquí - ¿por qué no puedo obtener el modelo de población de las vistas parciales?
Si su respuesta a esta pregunta a sí mismo, facilite una respuesta (abajo) y lo aceptan así que la pregunta se marca contestada. – kingdango
@Nayt, kingdango tiene razón. Mueva la parte de su pregunta marcada como "SOLUCIONADO" como una nueva respuesta a continuación. Después de hacerlo, márcalo como la respuesta aceptada. Un buen resultado de hacerlo es que a otros también les puede resultar útil su respuesta; si lo hacen, votarán positivamente su respuesta, que es una de las cosas divertidas de participar en este sitio. –
Creo que será mejor que utilices un EditorTemplate para el tipo de Dirección aquí. Esto evitaría muchos problemas al mantener su código en el futuro. –