54 votes

Quand et pourquoi avez-vous tryupdatemodel pour mettre en asp.net mvc 2?

Je n'arrive pas à trouver un exemple de code pour voir comment tryupdatemodel pour mettre les œuvres? Quand l'utilisez-vous et pourquoi?

48voto

Martin Doms Points 3964

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 mettre1] 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.TryUpdateModel1] 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

17voto

ASP.NET MVC Tips Points 121

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.

13voto

Ciaran Points 326

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X