Parfois, ce qui peut arriver est une erreur est renvoyée quelque part à l'intérieur de l'assemblage MVC qui n'est pas géré bien, et qui ne sont pas copiés dans votre état de modèle comme prévu. Ensuite, lorsque vous essayez d'afficher dans votre vue le Html.ValidationSummary
, il ne vous montre pas l'erreur, ce qui peut être très confus. Un exemple qui peut planter ce processus de liaison de modèle que j'ai écrit sur here. Habituellement, après avoir compris pourquoi cela se produit, vous pouvez apporter les corrections à votre code et ne plus vous en soucier.
J'ai le code suivant que j'utiliser pour inspecter pendant le débogage, de me laisser survolez à un point d'arrêt et voir ce qui se passe réellement:
public static IDictionary<string, string> GetModelStateErrors(this ViewDataDictionary viewDataDictionary)
{
Dictionary<string, string> dict = new Dictionary<string, string>();
foreach (var modelStateKey in viewDataDictionary.ModelState.Keys)
{
var modelStateValue = viewDataDictionary.ModelState[modelStateKey];
foreach (var error in modelStateValue.Errors)
{
var errorMessage = error.ErrorMessage;
var exception = error.Exception;
if (!String.IsNullOrEmpty(errorMessage))
{
dict.Add(modelStateKey, "Egads! A Model Error Message! " + errorMessage);
}
if (exception != null)
{
dict.Add(modelStateKey, "Egads! A Model Error Exception! " + exception.ToString());
}
}
}
return dict;
}
Ensuite, je peux insérer ce après que j'essaie à UpdateModel, et mettre un point d'arrêt sur elle:
var x = ViewData.GetModelStateErrors();
Mettez ce juste après l'appel à UpdateModel
. Passer la souris sur le x
vous montrera toutes les exceptions non gérées dans le processus de liaison de modèle, si c'est ce qui est vraiment le problème ici.
Bonne chance!
Je ne sais pas pourquoi il ne jette pas l'erreur sans voir réellement votre définition de l'objet modèle et clé de la FormCollection. Si vous le réécrivez pour qu'il utilise TryUpdateModel(), renvoie-t-il false? Est-ce que ModelState.IsValid() renvoie false? –
Vous utilisez convention pour marier les noms de champ dans votre page Web avec les noms de champ dans votre modèle. Pour diagnostiquer, nous aurions besoin de voir les deux. –
J'ai également remarqué que la page d'édition ne valide même pas correctement après avoir ajouté la méthode .IsValid (qui renvoie true). Cela continue comme si les données étaient correctes et ne se mettaient toujours pas à jour. dept publique LISTONE (int id) { département var = de d dans _dataContext.depts où d.deptid == id select d; return department.SingleOrDefault(); } –