Parece que no puedo encontrar solo una muestra de código básico para ver cómo funciona TryUpdateModel? ¿Cuándo lo usas y por qué?¿Cuándo y por qué usa TryUpdateModel en asp.net mvc 2?
Respuesta
Puede utilizar este método para actualizar el modelo que respalda una vista particular a través del controlador dado. Por ejemplo, si tengo una vista que muestra un objeto Foo con Barra de propiedades poblada por un cuadro de texto, puedo llamar a un método Guardar() en el controlador y llamar a TryUpdateModel para intentar actualizar el Foo.
public class Foo {
public string Bar { get; set; }
}
// ... in the controller
public ActionResult Save() {
var myFoo = new Foo();
TryUpdateModel(myFoo);
}
Esto intentará actualizar el modelo con el valor dado para la barra. Si la actualización falla la validación (por ejemplo, esa barra era un número entero y el cuadro de texto tenía el texto "hola"), TryUpdateModel pasará la actualización de ViewData ModelState con errores de validación y su vista mostrará los errores de validación.
Asegúrese de prestar mucha atención a la advertencia de seguridad para .NET Framework 4 en la documentación de MSDN:
Nota de seguridad Utilice una de las [sobrecarga: System.Web.Mvc.Controller. TryUpdateModel``1] métodos que toman una lista de propiedades para incluir (una lista blanca) o una lista de propiedades para excluir (una lista negra ). Si no hay lista blanca o negra explícita se pasa, el [sobrecarga: System.Web.Mvc.Controller.TryUpdateModel`1] método intenta actualizar todos los propiedad pública en el modelo para la que no es un valor correspondiente en la solicitud. Un usuario malintencionado podría explotar esto para actualizar propiedades a las que no tiene intención de dar acceso .
https://msdn.microsoft.com/en-us/library/system.web.mvc.controller.tryupdatemodel(v=vs.100).aspx
TryUpdateModel()
le permite enlazar parámetros para el modelo dentro de su acción. Esto es útil si desea cargar su modelo desde una base de datos y luego actualizarlo en función de la entrada del usuario en lugar de tomar todo el modelo de la entrada del usuario.
public ActionResult Update(int id) {
var service = new ServiceClass();
var record = service.LoadModel(id);
if (!TryUpdateModel(record)) {
// There was an error binding data
return View();
}
// Everything was ok, now save the record back to the database
service.SaveModel(record);
return View("Success");
}
Funciona de manera similar a UpdateModel()
a este respecto, pero devuelve verdadero y falso en caso de éxito si hay un error. UpdateModel()
arroja una excepción si hay un error que requiere un poco más de código.
Nota: Es posible que desee utilizar una de las sobrecargas que le permite límite de las propiedades que se pueden actualizar.
Se utilizó, además de evitar TryUpdateModel
Modelo mágica unión antes de la acción se llama; en cambio tomamos un HttpFormCollection
como nuestro parámetro y llamamos al TryUpdateModel
dentro del método. El valor booleano limpio devuelto por este flujo de control permitido pasará a un método Correcto o Incorrecto para la Acción. p.ej.
public ActionResult Save(HttpFormCollection formCollection)
{
var saveModel = new SaveModel(); // or from a Factory etc
var validModel = TryUpdateModel(_saveModel, formCollection); // order may be incorrect
return validModel ? Save(saveModel) : InvalidSaveModel(saveModel);
}
nos pareció bastante fácil construir un HttpFormCollection
para todos nuestros casos de validación y, por tanto, comprobar la acción.
- 1. ¿Cuándo y por qué debería considerar asp.net MVC?
- 2. TryUpdateModel lanza NullReferenceException en prueba de unidad ASP.NET MVC 3
- 3. En MVC, ¿cuándo usa <%= %> y <% %>?
- 4. Cuándo realizar transacciones NHibernate en la aplicación ASP.NET MVC 2?
- 5. UpdateModel vs TryUpdateModel
- 6. RadioButtonFor en ASP.NET MVC 2
- 7. xVal y ASP.Net MVC 2 AddModelStateErrors Problema
- 8. ASP.NET MVC 2 - HTML.EditorFor() y Custom EditorTemplates
- 9. ASP.NET MVC> ASP.NET WebForms, ¿Por qué?
- 10. ¿Por qué usar ASP.NET MVC 2 para servicios REST? ¿Por qué no WCF?
- 11. asp.NET MVC 2 DataAnnotations UpdateModel <T> validación
- 12. ASP.NET MVC: ¿Cuándo configurar Thread.CurrentThread.CurrentUICulture?
- 13. cuándo utilizar knockout javascript con ASP.NET MVC
- 14. Solicitar validación - ASP.NET MVC 2
- 15. asp.net mvc mvc 2 a 4
- 16. Descarga de archivos en Asp.Net MVC 2
- 17. Múltiples entornos en ASP.Net MVC 2
- 18. ¿Por qué se usa "cuándo" en esta función?
- 19. Templating Html.DisplayFor() en ASP.NET MVC 2
- 20. Html.LabelPara texto especificado [ASP.NET MVC 2]
- 21. Autenticación de 2 pasos en ASP.Net MVC
- 22. Asp.net MVC 2 almacenamiento en caché
- 23. Por qué no se permiten los resultados de redireccionamiento en Acciones secundarias en Asp.net MVC 2
- 24. ActionLink fuertemente tipado en Asp.Net MVC 2?
- 25. ¿Cuándo desechar y por qué?
- 26. Asp.net MVC 3 Validación excluir algunos validación de campo en TryUpdateModel
- 27. ASP.NET MVC 2 y las listas como valores ocultos?
- 28. ¿Por qué los decoradores de rutas rompen el enrutamiento en ASP.NET MVC 2?
- 29. SessionID sigue cambiando en ASP.NET MVC ¿por qué?
- 30. ¿Por qué Html.Checkbox ("Visible") devuelve "verdadero, falso" en ASP.NET MVC 2?
+1 para incluir la advertencia de seguridad sobre la asignación masiva. Esta vulnerabilidad es común a la mayoría de los frameworks MVC, y es lo que permitió que GitHub fuera creado (http://www.extremetech.com/computing/120981-github-hacked-millions-of-projects-at-risk-of-being- modified-or-deleted). –
Esa vulnerabilidad también se aplica cuando no usa TryUpdateModel. También puede especificar una lista blanca: public ActionResult ActionName ([Bind (Include = "FieldName"] Model) o una lista negra public ActionResult ActionName ([Bind (Exclude = "FieldName"] Model) cuando no confía en TryUpdateModel http://odetocode.com/blogs/scott/archive/2012/03/11/complete-guide-to-mass-assignment-in-asp-net-mvc.aspx – Rui