Je n'arrive pas à trouver un exemple de code pour voir comment tryupdatemodel pour mettre les œuvres? Quand l'utilisez-vous et pourquoi?
Réponses
Trop de publicités?Vous pouvez utiliser cette méthode pour mettre à jour le modèle qui soutient un point de vue particulier via le contrôleur. Par exemple, si j'ai une vue de l'affichage d'un objet Foo avec Barre de propriétés, peuplée par une zone de texte, je peux appeler la méthode Save() du contrôleur et de l'appel tryupdatemodel pour mettre à tenter de mettre à jour le Foo.
public class Foo {
public string Bar { get; set; }
}
// ... in the controller
public ActionResult Save() {
var myFoo = new Foo();
TryUpdateModel(myFoo);
}
Ce sera d'essayer de mettre à jour le modèle avec la valeur donnée pour le Bar. Si la mise à jour de l'échec de la validation (disons, par exemple, que la Barre a été un entier et la zone de texte a le texte "bonjour") puis tryupdatemodel pour mettre passera mise à jour de la ViewData ModelState avec des erreurs de validation et de votre point de vue va afficher les erreurs de validation.
Assurez-vous que vous payez une attention particulière à l'avertissement de sécurité dans la documentation MSDN:
Note de sécurité Utilisez l'une des [Surcharge Du Système.Web.Mvc.Le contrôleur.Tryupdatemodel pour mettre
1] methods that takes either a list of properties to include (a whitelist) or a list of properties to exclude (a blacklist). If no explicit whitelist or blacklist is passed, the [Overload:System.Web.Mvc.Controller.TryUpdateModel
1] méthode tente de mettre à jour tous les publics propriété dans le modèle pour lequel il n'y est une valeur correspondante dans la demande. Un utilisateur malveillant pourrait exploiter cette mise à jour de la les propriétés que vous n'avez pas l'intention de fournir l'accès à l'.
http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.tryupdatemodel.aspx
Tryupdatemodel pour mettre() permet de lier des paramètres de votre modèle à l'intérieur de votre action. Ceci est utile si vous souhaitez charger votre modèle à partir d'une base de données puis la mise à jour basé sur la saisie de l'utilisateur plutôt que de prendre l'ensemble du modèle à partir de la saisie de l'utilisateur.
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");
}
Elle agit comme UpdateModel() à cet égard, mais retourne true en cas de succès, et false si une erreur existe. UpdateModel() lève une exception si il y a une erreur qui nécessite un peu plus de code.
Remarque: Vous pouvez utiliser l'une des surcharges qui permet de limiter les propriétés qui peuvent être mis à jour.
Nous avons également utilisé tryupdatemodel pour mettre pour éviter la Liaison du Modèle de la magie avant que l'Action a été appelé; au lieu de cela, nous avons pris un HttpFormCollection que notre paramètre et appelé tryupdatemodel pour mettre à l'intérieur de la méthode. Le propre valeur booléenne retour de ce permis de flux de contrôle pour être transmis à un Succès ou à l'Échec de la méthode pour l'Action. par exemple
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);
}
Nous avons trouvé il assez facile de construire un HttpFormCollection pour tous nos validation cas test de l'action.