In parole semplici, cosa fa UpdateModel()
e TryUpdateModel()
? Non riesco a trovare (su SO o sul web) alcuna spiegazione chiara di ciò che effettivamente fa (in termini chiari), solo le persone che hanno problemi ad usarlo.Cosa fa UpdateModel()?
L'intellisense di VisualStudio non mi aiuta neanche. Il motivo per cui mi chiedo è perché, diciamo, se ho questo nel mio controller:
[HttpPost]
public ActionResult Index(UserViewModel vm, FormCollection form)
{
var statesCheckBoxes = form["StatesList"];
vm.BA.StatesTraveledTo = statesCheckBoxes.Split(',').ToList<string>();
return View(vm);
}
non sono già aggiornare il mio modello impostando vm.BA.StatesTraveledTo
? Perché devo eseguire UpdateModel? Inoltre, quando in realtà cerco di fare quanto segue:
[HttpPost]
public ActionResult Index(UserViewModel vm, FormCollection form)
{
var statesCheckBoxes = form["StatesList"];
vm.BA.StatesTraveledTo = statesCheckBoxes.Split(',').ToList<string>();
UpdateModel(vm); // IS THIS REDUNDANT TO THE PREVIOUS LINE?
return View(vm);
}
nulla sembra accadere in quanto quando ho ispezionare il valore del ModelState (dopo corro UpdateModel()), non vedo nulla che indica che qualsiasi cosa è cambiato. Non vedo una nuova chiave nel dizionario ModelState.
Davvero confuso. Grazie!
Edit:
Distacco il codice sorgente per le classi ViewModel e modello:
public class UserViewModel
{
public BankAccount BA { get; set; }
}
public class BankAccount
{
public Person User { get; set; }
public List<string> StatesTraveledTo { get; set; }
}
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}
Ecco il codice sorgente per esso: http://aspnet.codeplex.com/SourceControl/changeset/view/72551#266451 È piuttosto semplice, solo crea un ModelBindingContext e lo lega –
Inoltre, è un po ' raro passare lo stesso oggetto che hai ricevuto come input in un'azione nella vista, succede ma è raro e questo non sembra uno di quegli usi. Solitamente si prende come input un oggetto che rappresenta i dati inviati e quindi si crea un modello separato per la vista –
Grazie. Il motivo per cui sto restituendo il modello alla vista è a scopo di validazione. Quindi, nel caso in cui la validazione fallisca, voglio che il modello e i suoi valori siano passati alla vista in modo che i campi del modulo vengano ripopolati e venga visualizzato un messaggio di errore. Scusa, immagino che con il codice che ho mostrato, potrebbe non sembrare un esempio pratico. – SaltProgrammer