2012-08-07 17 views
6

Il modelloMVC modello non aggiornare

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

L'azione del controller

[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> 

Il problema è quando la città viene modificato, che non viene mai riflette su la vista. Durante il debug, lo model.City contiene il valore corretto ma non viene visualizzato sulla vista. Anche qualcosa di semplice come @Html.TextBoxFor(model => model.City) non visualizza il valore corretto model.City.

+0

puoi pubblicare la vista ? –

+1

il modello che hai pubblicato e quello che stai passando come parametro non sono gli stessi. Hai fatto riferimento al modello sbagliato? – Tommy

+0

@MarkOreta: aggiornata la domanda, aggiunta la vista – xar

risposta

17

HtmlHelpers ottiene i valori del modello dallo stato del modello e non dal modello quando si aggiorna e si restituisce il modello. Per aggiornare e restituire il modello, aggiungere questa riga di codice nel tuo metodo POST:

ModelState.Clear(); 

o si può impostare il valore della città nel ModelState sé:

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

Questo ha senso. È questo il caso su tutte le versioni di MVC? – xar

+0

Per quanto ne so, si. Lo stato del modello è ciò che dice la vista sulle proprietà valide/non valide, ecc. – Tommy

+2

Questo deve essere implementato per Aprils Fools day ... Grazie. (Ho guardato solo 2 ore sul mio lato server e sul lato client. Avrei dovuto iniziare a cercare su Google in precedenza ...) –