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
}
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! :) –