2010-08-23 6 views
4

Disons que nous avons une classe avec une propriété appelée PetsName. Si elle est laissée vide sur l'écran, je veux mettre à jour le fournisseur de valeur, donc si l'utilisateur n'entre pas de nom d'animal domestique, nous forçons 'unnamed'. Ce n'est pas le scénario réel .. c'est bien sûr un exemple, donc des réponses comme 'juste définir les valeurs par défaut sur une page web, etc' ne correspondront pas à ce scénario:)Mise à jour du fournisseur de valeur avant TryUpdateModel

Le problème principal est que nous voulons mettre à jour les valeurs ainsi quand vous mettez à jour le modèle il utilisera tout ce que vous avez substitué. Je suppose qu'une idée est de supprimer la valeur et l'ajouter. Quand je vérifie ModelState, il a la valeur mise à jour, cependant quand j'appelle TryUpdateModel, la valeur n'est pas mise à jour. C'est possible ce que je fais ci-dessous est en effet correct et il y a un autre problème ici mais je me suis dit que j'essaierais ça en premier. Merci!

//Sample case: 

    [HttpPost] 
    public ActionResult Edit(PetOwner petOwner) 
    { 

    //If pets name is not set, force to "Unknown" 
    if(petOwner.PetsName=="") 
    { 
    //Tried this too ModelState.Remove("PetsName"); 
    //ModelState.Add("PetsName", new ModelState()); 
    ModelState["PetsName"].Value = new ValueProviderResult("Unnamed", "Unnamed", CultureInfo.CurrentCulture); 
    } 

    //Get the record/relationships from DB to merge with ModelState 
    PetOwner petOwnerToSave = from o in ctx.PetOwners where o.PetOwnerId == petOwner.PetOwnerId select o; 

    TryUpdateModel(petOwnerToSave); 

    //Save petOwnerToSave 
    } 

Répondre

4

Le vrai problème dans les coulisses est ici que Html.HiddenFor ne montrait pas la valeur correcte, même si TryUpdateModel a été mise à jour une valeur dans le modèle pour donner à la vue. Le problème ici est que les helpers Html supposent que si vous affichez une vue après un post, il doit y avoir une erreur (sinon vous reviendrez à la vue avec une méthode GET - d'où le problème Post Redirect Get)

Ceci est décrit en détail: http://blogs.msdn.com/b/simonince/archive/2010/05/05/asp-net-mvc-s-html-helpers-render-the-wrong-value.aspx

+0

Et "en détail" vous voulez dire sans passer par la prise en charge post-Redirect-Get des aides en utilisant 'ModelState.Clear();'. Merci beaucoup pour ce lien, j'avais vraiment des problèmes à comprendre pourquoi je recevais des erreurs après un post ajax. Votre autre conseil (ici: http://stackoverflow.com/a/5906396/1026459) correspond vraiment bien à cela en ce qu'il montre comment obtenir correctement le balisage de validation dans les vues partielles avec '@ {if (ViewContext.FormContext == null) {ViewContext.FormContext = nouveau FormContext();} '. Merci! :) –

Questions connexes