2012-08-07 20 views
6

El modeloMVC Modelo no actualizar

class Address 
{ 
    public string Street { get; set; } 
    public string City { get; set; } 
    public string State { get; set; } 
    public string Zip { get; set; } 
} 

La acción del controlador

[HttpPost] 
public ActionResult GetAddress(Address model) 
{ 
    if (!String.IsNullOrEmpty(model.Zip)) 
    { 
     model.City = GetCityByZip(model.Zip); 
    } 
    return View(model); 
} 

La vista

<div class="formrow"> 
    @Html.LabelFor(model => model.City) 
    @Html.TextBoxFor(model => model.City) 
    @Html.ValidationMessageFor(model => model.City) 
</div> 
<div class="formrow"> 
    @Html.LabelFor(model => model.State) 
    @Html.DropDownListFor(model => model.State, (IEnumerable<SelectListItem>)ViewBag.States, new { style = "width:217px;" }) 
    @Html.ValidationMessageFor(model => model.State) 
</div> 
<div class="formrow"> 
    @Html.LabelFor(model => model.Zip) 
    @Html.TextBoxFor(model => model.Zip) 
    @Html.ValidationMessageFor(model => model.Zip) 
</div> 

El problema es cuando se está modificando la ciudad, nunca se refleja en la vista. Durante la depuración, el model.City contiene el valor correcto pero no aparece en la vista. Incluso algo tan simple como @Html.TextBoxFor(model => model.City) no muestra el valor correcto de model.City.

+0

Se puede publicar la vista ? –

+1

el modelo que ha publicado y el que está pasando como parámetro no son lo mismo. ¿Ha hecho referencia al modelo equivocado? – Tommy

+0

@MarkOreta: actualizó la pregunta, agregó la vista – xar

Respuesta

17

HtmlHelpers obtiene los valores del modelo del estado del modelo y no del modelo cuando actualiza y devuelve el modelo. Con el fin de actualizar y devolver el modelo, agregue esta línea de código en su método post:

ModelState.Clear(); 

o se puede establecer el valor de la ciudad en el propio ModelState:

ModelState["City"].Value = GetCityByZip(model.Zip); 
+0

Eso tiene sentido. ¿Es este el caso en todas las versiones de MVC? – xar

+0

Hasta donde yo sé, sí. El estado del modelo es lo que le dice a la vista sobre las propiedades válidas/inválidas, etc. – Tommy

+2

Esto debe implementarse en el día de April Fools ... Gracias. (Acabo de ver 2 horas en el lado del servidor y el código del lado del cliente. Debería haber comenzado a googlear antes ...) –

Cuestiones relacionadas