2015-08-07 1 views
-1

Je travaille actuellement sur un projet dans ASP.NET MVC4 avec framework d'entité. Voici le problème, je voudrais que mon code renvoie un objet Json différent selon que le Db.savechanges a fonctionné ou non! J'ai fait un peu de débogage avec la console et il semble que je reçois toujours faux de l'autre partie de mon IF et il ne va jamais dans la condition réelle, même si la condition est ok. Difficile à expliquer, mais facile à comprendre avec le code alors voilà.ASP.NET MVC4 Entity Framework db.SaveChanges() La condition ne fonctionne pas

code de mon contrôleur envoyer objet JSON Vrai ou faux à mon javascript

[HttpPost] 
    public ActionResult Enregistrer_Inscription(InscriptionPost inscPost) 
    { 

      NoirEtOrEntities db = new NoirEtOrEntities(); 
      Inscription insc = new Inscription() 
      { 
       inscriptionNom = inscPost.nomJ, 
       inscriptionPrenom = inscPost.prenomJ, 
       inscriptionDateNaissance = inscPost.DateNaissance, 
       inscriptionDate = DateTime.Now, 
       inscriptionCategory = inscPost.Category, 
       inscriptionDivision = inscPost.Division, 
       inscriptionStatut = inscPost.Statut, 
       inscriptionTaille = inscPost.Taille, 
       inscriptionSexe = inscPost.Sexe, 
       inscriptionEcole = inscPost.Ecole, 
       inscriptionAgeSept = inscPost.AgeSept, 
       inscriptionNiveauScolaire = inscPost.NiveauScolaire, 
       inscriptionAdresseJ = inscPost.AdresseJ, 
       inscriptionVilleJ = inscPost.VilleJ, 
       inscriptionCodePostalJ = inscPost.CodePostalJ, 
       inscriptionCourrielJ = inscPost.CourrielJ, 
       inscriptionTelephoneJ = inscPost.TelephoneJ, 
       inscriptionNomP = inscPost.nomP, 
       inscriptionPrenomP = inscPost.prenomP, 
       inscriptionAdresseP = inscPost.AdresseP, 
       inscriptionVilleP = inscPost.VilleP, 
       inscriptionCodePostalP = inscPost.CodePostalP, 
       inscriptionCourrielP = inscPost.CourrielP, 
       inscriptionTelephoneP = inscPost.TelephoneP, 
       inscriptionNomM = inscPost.nomM, 
       inscriptionPrenomM = inscPost.prenomM, 
       inscriptionAdresseM = inscPost.AdresseM, 
       inscriptionVilleM = inscPost.VilleM, 
       inscriptionCodePostalM = inscPost.CodePostalM, 
       inscriptionCourrielM = inscPost.CourrielM, 
       inscriptionTelephoneM = inscPost.TelephoneM, 
       inscriptionNotes = inscPost.Notes, 

      }; 
     try 
     { 
      db.Inscription.Add(insc);    
      db.SaveChanges(); 
      if (db.SaveChanges() > 0) 
      { 
       return Json(new { success = true }); 
      } 
      else 
      { 
       return Json(new { success = false }); 
      } 

     }    
     catch (System.Data.Entity.Validation.DbEntityValidationException ex) 
     { 
      return Json(new { success = false }); 
     }      
    } 
} 

Voici mon code Jquery

success: function (data) { 
       console.log(data); 
       console.log(data.success); 
       if (data.success == true) { 
        console.log("succ"); 
        console.log(data); 
        alertify.success("Formulaire recu avec succès", 5000); 
        Vider_Champs() 
       } 
       else { 
        console.log("nope"); 
        console.log(data); 
        alertify.error("Le formulaire comporte des erreurs", 5000); 
       }      
      }, 
      error: function() { 
       console.log("error"); 
       alertify.error("Le formulaire comporte des erreurs", 5000); 
      } 
     }); 
    } 

Le problème est le code: if (db.SaveChanges() > 0) Merci pour votre aide

Répondre

0

Le problème est que vous appelez deux fois db.SaveChanges():

db.SaveChanges();    // save changes to database 
if (db.SaveChanges() > 0)  // save changes once again 
{ 
    return Json(new { success = true }); 
} 

Première fois que vous appelez la méthode, les modifications sont enregistrées et il n'y a rien à enregistrer la prochaine fois que vous l'appelez. Au lieu de cela, sauvegardez le résultat de l'appel dans la variable et l'utiliser dans la ligne suivante:

int result = db.SaveChanges(); 
if (result > 0) 
{ 
    return Json(new { success = true }); 
} 
+0

juste essayé et sa ne fonctionne pas! ne va toujours pas dans le SI, il le dépasse et retourne faux à partir de l'autre – JeffLA

+0

@JeffLA Etes-vous sûr qu'il fonctionne dans une autre instruction? Un autre cas où false est renvoyé est quand 'DbEntityValidationException' est levé pendant la méthode de sauvegarde appelez – dotnetom

+0

votre droit! c'est à cause de cette exception! mais je ne comprends pas vraiment – JeffLA