2014-04-28 1 views
0

J'ai une action Créer et méthode Enregistrer. La création action affiche simplement la vue comme indiqué ci-dessousValidation dans asp.net mvc

public ActionResult Create() 
     { 
return view(); 
} 

créer un point de vue, je reçois quelques champs comme le nom, l'adresse, etc. Une fois que l'utilisateur entre les données et cliquez sur le bouton Enregistrer, j'appelle la méthode Save à l'aide appel ajax. Dans la méthode Save, je suis en train de valider les données:

[HttpPost] 
      public bool Save(UserModel User) 
      { 
       if (ModelState.IsValid) 
       { 

        // save the data 
        return true; 
       } 

       else 
       { 
        return false; 
       } 
      } 

la réponse de cette méthode est utilisée dans ajax de Create Voir:

$(function() { 
     $("#btnSave").click(function() { 
       $.ajax({ 
       type: "POST", 
       contentType: "application/json;charset=utf-8", 
       url: "/Contoller/Save", 
       data: 
          // parameters 
       async: false, 
       success: function (data_l) { 
        if (data_l == true) 
        { 
         alert("record has been saved in database"); 
         window.location.href = "@Url.Action("Index","Controller")"; 
        } 
        else{ 
         alert ("Invalid Entry"); 
         window.location.href = "@Url.Action("Create","Controller")"; 
        } 
       }, 
        error: function() { 
         console.log("there is some error"); 
        } 
      }); 
     }); 

Ce que je veux atteindre est basée sur la réponse de la Enregistrer la méthode, je devrais effectuer deux opérations. Si les données sont correctement validées, les données sont sauvegardées et la page d'index est rechargée. Si la validation échoue, je souhaite afficher la vue de création avec les champs entrés avec les messages de validation. Je suis sûr que les attributs d'annotation de données sont correctement utilisés dans le modèle. Quelqu'un peut-il m'aider s'il vous plaît à résoudre ce problème.

+0

ce qui ne va pas avec votre implémentation actuelle? – Neel

+0

Je n'arrive pas à voir la vue avec les champs entrés – user3363329

Répondre

1

Je vous suggère d'effectuer une validation côté serveur, c'est-à-dire dans votre contrôleur. Effectuez d'abord la validation des entrées, si tout va bien, enregistrez les données sur le stockage persistant. Si les données sont sauvegardées avec succès, chargez l'affichage de l'index ou de la liste (quelle que soit la vue que vous voulez en retournant View() ou RedirectToResult()). En cas de problème, ajoutez une erreur dans l'objet ModelState et renvoyez la même vue. Au client, l'erreur sera affichée avec les données déjà saisies par l'utilisateur.

Pour un exemple ci-dessous se réfèrent extrait de code (il pourrait y avoir d'autres moyens mais c'est ce que nous utilisons pour le moment):

public ActionResult AddNewSearch(SearchViewModel searchModel) 
    { 
     if (User.Identity.IsAuthenticated) 
     { 
      if (ModelState.IsValid) 
      { 
       var organizationUser = this.GetUser(); 

       if (organizationUser == null) 
       { 
        ModelState.AddModelError("RecordNotFound", string.Format("No organization user found!!!")); 
        return RedirectToAction("LogOff", "Account"); 
       } 

       if (this.searchService.GetUserSearch(organizationUser.Id, searchModel.Name) != null) 
       { 
        ModelState.AddModelError("RecordAlreadyExists", string.Format("Search already exists!!!")); 
        return View(searchModel); 
       } 

       var userSearchDomainModel = mappingService.Map<SearchViewModel, Search>(searchModel); 
       searchService.AddUserSearch(organizationUser, userSearchDomainModel); 
       return RedirectToAction("Index", "Search"); 
      } 
     } 

     return RedirectToAction("Index", "Search"); 
    }