2010-10-26 4 views
0

J'ai un modèle de vue typé fort et une classe partielle MetaData qui possède des attributs d'annotation sur les champs obligatoires et le type de champ. La page de vue Create.aspx a un formulaire lors de la soumission exécutera la méthode Create dans le contrôleur. Lorsque l'utilisateur soumet le formulaire sans que tous les champs requis soient entrés, en arrivant à la ligne UpdateModel(), une exception est levée. Cependant, aucun des messages d'erreur spécifiés dans les champs annotés n'est affiché. Au lieu de cela, l'exécution parcourt le RuleViolation() et atterrit au message d'exception le plus générique. Ainsi, l'utilisateur ne sait pas que certains champs obligatoires ne sont pas entrés. Si je définis la vérification si vide des champs obligatoires dans la méthode RuleVilolation() alors ce n'est pas DRY. Est-ce que quelqu'un sait pourquoi les messages d'erreur ne sont pas affichés à partir de la MetaClass? Je vous remercie.UpdateModel raise exception

///Controller method 
[AcceptVerbs(HttpVerbs.Post)] 
[ValidateInput(false)] 
public ActionResult Create(string id, [Bind(Prefix = "Transfer")]TransferFormViewModel newTransferViewModel, string cancel) 
{ 
    .... 
    if (ModelState.IsValid) 
    { 
     Transfer newTransfer = new Transfer(); 

     if (ModelState.IsValid) 
     { 
     try 
      { 
      Person person = base.ApplicaitonRepository.GetPerson(intID); 
      UpdateModel<Transfer>(newTransfer, "Transfer"); 
      ..... 
      } 
     catch (Exception ex) 
      { 
      newTransfer.MiscException = ex; 
      HelpersLib.ModelStateHelpers.AddModelErrors(this.ModelState, newTransfer.GetRuleViolations()); 
      } 
     } 
    } 
    return View(new TransferFormViewModel(base.ApplicaitonRepository, newTransfer)); 
} 

///partial domain objec class 
[MetadataType(typeof(TransferMetaData))] 
public partial class Transfer 
{ 
    public IEnumerable<RuleViolation> GetRuleViolations() 
    { 
    .... 
    } 
} 

///MetaData class 
class TransferMetaData 
{ 
[Display(Name="List Type")] 
public int ListType { get; set; } 

[Required(ErrorMessage = "Notification Date/Time is required."), Display(Name = "Notification Date/Time")] 
     public DateTime AddedToListDate { get; set; } 

[Required(ErrorMessage="Admit Date/Time is required."), Display(Name="Admit Date/Time")] 
... 
} 
+1

Vous devriez envisager de marquer votre section de code entier comme du code car comme ceci personne ne le lira parce qu'il est illisible .... – apolka

Répondre

0

Avez-vous <% = Html.ValidationSummary()%> quelque part dans votre vue?

Quelles sont les entrées dans votre ModelState?

+0

Oui, j'ai Html.ValidationSummary dans la page de vue, mais il montre juste la dernière erreur générique message car c'est le dernier qui capture toute violation non spécifique dans le RuleViolation(). Le fait est que lorsque vous sous-publiez un formulaire, les messages d'erreur des champs obligatoires n'apparaissent pas dans le résumé, mais le message de violation de règle est affiché. – user266909

Questions connexes