En términos simples, ¿qué hace UpdateModel()
, así como TryUpdateModel()
? Parece que no puedo encontrar (en SO o en la web) ninguna explicación clara de lo que realmente hace (en términos claros), solo personas que tienen problemas para usarlo.¿Qué hace UpdateModel()?
El intellisense de VisualStudio tampoco me está ayudando. La razón por la que pido es porque, digamos, si tengo esto en mi controlador:
[HttpPost]
public ActionResult Index(UserViewModel vm, FormCollection form)
{
var statesCheckBoxes = form["StatesList"];
vm.BA.StatesTraveledTo = statesCheckBoxes.Split(',').ToList<string>();
return View(vm);
}
¿verdad ya actualizar mi modelo mediante el establecimiento de vm.BA.StatesTraveledTo
? ¿Por qué necesito ejecutar UpdateModel? Además, cuando en realidad trato de hacer lo siguiente:
[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);
}
Nada parece suceder en que cuando examino el valor de la ModelState (después de ejecutar UpdateModel()), no veo nada que indique que cualquier cosa ha cambiado. No veo una nueva clave en el diccionario ModelState.
Realmente confundido. ¡Gracias!
Editar:
Publicar el código fuente de las clases ViewModel y modelo:
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; }
}
Aquí está el código fuente para ello: http://aspnet.codeplex.com/SourceControl/changeset/view/72551#266451 es bastante simple ,, simplemente crea un ModelBindingContext y lo enlaza –
Además, es un tanto Es raro que pase el mismo objeto que recibió como entrada en una acción en la vista, sucede pero es raro y esto no parece ser uno de esos usos. Por lo general, toma como entrada un objeto que representa los datos publicados y luego crea un modelo separado para la vista –
Gracias. La razón por la que devuelvo el modelo a la vista es para fines de validación. Entonces, en caso de que falle la validación, quiero que el modelo y sus valores pasen a la vista para que los campos del formulario se vuelvan a llenar y se muestre un mensaje de error. Lo siento, creo que con el código que mostré, puede que no parezca un ejemplo práctico. – SaltProgrammer