2017-03-18 30 views
-1

こんにちは、MVCは、登録フォーム

に多くの必要なフィールドを追加する私は必要な2つのフィールドを作るために(下記参照)私のレジスタビューに2つのカスタムフィールドを追加し、レジスタ制御部とAccountモデルを修正しています。 私はその時点で固まっています。 1 - 私の2つの余分なフィールドは、パスワードとユーザー名フィールドがあると考えられても検証されません。 2 - 私のコントローラコードはもう実行されません。

誰かがアイデアを持っていますか?

@model FEC.Models.RegisterModel 
    @{ 
     ViewBag.Title = "Utilisateur"; 
    } 

    <!DOCTYPE html> 
    <html> 
    <head> 
     <title></title> 
     @{ 
      ViewBag.Title = "Roles"; 
      Layout = "~/Views/Shared/_Layout.cshtml"; 
     } 

     <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> 
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"> </script> 
     <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> 


     @* *************** Référence pour les menus déroulants Bootstrap ******************** *@ 
     <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.12.1/css/bootstrap-select.min.css"> 
     <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.12.1/js/bootstrap-select.min.js"></script> 
     <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.12.1/js/i18n/defaults-fr_FR.min.js"></script> 
     @* *************** Fin référence pour les menus déroulants Bootstrap ******************** *@ 

     <script src="http://cdnjs.cloudflare.com/ajax/libs/handlebars.js/2.0.0-alpha.4/handlebars.min.js"></script> 



     <script type="text/javascript"> 
      templateRoles = null; 
      templateUsers = null; 

      //*************** Roles ************** 
      $(function() { 
       templateRoles = Handlebars.compile($("#RolesTemplate").html()); 

       $(".scroll").click(function (event) { 
        event.preventDefault(); 
        $('html,body').animate({ scrollTop: $(this.hash).offset().top }, 1000); 
       }); 

       $.getJSON("../Account/ListerRole", null, function (data) { 
        var result = templateRoles(data.list); 
        $("#RolesOutput").html(result); 
       }); 
      }); 

      //*************** Utilisateurs ************** 
      $(function() { 
       templateUsers = Handlebars.compile($("#UsersTemplate").html()); 

       $(".scroll").click(function (event) { 
        event.preventDefault(); 
        $('html,body').animate({ scrollTop: $(this.hash).offset().top }, 1000); 
       }); 

       $.getJSON("../Account/GetListeUsers", { typeUsr: 'Administrateurs' }, function (data) { 
        var result = templateUsers(data.rows); 
        $("#UsersOutput").html(result); 
       }); 
      }); 

      //*** Fonction pour remplir la liste déroulante des utilisateurs selon le rôle choisi *** 
      function ChangementRole(choixRole) { 
       //*** Appelle à une fonction "Ajax Callback" *** 
       RemplirSelect(choixRole, function (retourSupPret) { 
        if (retourSupPret) { //*** récupération de l'appel Ajax *** 

         //*** Utilisation de Handlebars pour traiter les données *** 
         var templateUsers = null; 

         templateUsers = Handlebars.compile($("#UsersTemplate").html()); 

         $(".scroll").click(function (event) { 
          event.preventDefault(); 
          $('html,body').animate({ scrollTop: $(this.hash).offset().top }, 1000); 
         }); 

         var result = templateUsers(retourSupPret.rows); 
         $("#UsersOutput").html(result);  //*** Affiche le résulta dans l'espace à cet effet *** 
         $("#UsersOutput").selectpicker('refresh'); //*** Rafraichi le contrôle *** 
         //*** Reinitialise le contenu des contrôles cachés *** 
         $('#NomRole').val(''); 
         $('#NomPersonne').val(''); 

        }; 
       }); 
      }; 



      //*** Function AJAX CALLBACK pour retirer les noms des utilisateurs *** 
      function RemplirSelect(typeUsr, callback) { 
       var rep; 
       var tUsr = null; 

       switch (typeUsr) { 
        case 'Conseillers': 
         tUsr = "CS_"; 
         break; 
        case 'Demandeurs': 
         tUsr = "DD_"; 
         break; 
         //default: 
         // msg = "La sélection n'est pas dans la liste!"; 
         // break; 
       } 

       //******************* Envoie la requête au serveur *** 
       $.ajax({ 
        type: "GET", 
        url: "../Account/GetListeUsers", 
        data: { 
         typeUsr: tUsr, 
        }, 
        dataType: "json", 
        //******************* Liste écupérée avec succès *********************** 
        success: function (data, status) { 
         rep = data; 
         callback(rep); //*** Renvoi du résultat à la function RemplirSelect 
        }, 
        error: function (err) { 
         //******************* Liste non récupérée ******************** 
         msg = "La liste des utilisateurs n'a pas pu être retiré!"; 
         console.log(msg); 
         console.log(err); 
        } 
       }); 
      } 
     </script> 
    </head> 
    <body> 

     @* ********** Liste des Roles ************************* *@ 
     <script id="RolesTemplate" type="text/x-handlebars-template"> 
      <select id="cbxRolesOutput" class="selectpicker" title="Choisissez..." onchange="ChangementRole(this.value)"> 
       {{#each}} 
       <option value="{{Text}}">{{Text}}</option> 
       {{/each}} 
      </select> 
      <script> 
       $('.selectpicker').selectpicker(); 
      </script> 
     </script> 


     @* ********** Liste des demandeurs sans login ************************* *@ 
     <script id="UsersTemplate" type="text/x-handlebars-template"> 
      <select id="cbxUtilisateursOutput" class="selectpicker" title="Choisissez..." data-live-search="true" onchange="RecuppererRoleEtNomUtilisateur(this.value)"> 
       {{#each}} 
       <option value="{{Code}}">{{Nom}}</option> 
       {{/each}} 
      </select> 
      <script> 
       $('.selectpicker').selectpicker(); 
      </script> 
     </script> 
     <hgroup class="title"> 
      <h1>Menu utilisateurs: </h1> 
      <h2>Créer un nouveau compte.</h2> 
     </hgroup> 
     <hr /> 

     @using (Html.BeginForm()) 
     { 
      @Html.AntiForgeryToken() 
      @Html.ValidationSummary() 

      <fieldset> 
       <legend>Formulaire d'enregistrement</legend> 
       <ol> 
        <li> 
         @Html.LabelFor(m => m.UserName) 
        </li> 
        <li> 
         @Html.TextBoxFor(m => m.UserName) 
        </li> 
        <li> 
         @Html.LabelFor(m => m.Password) 
        </li> 
        <li> 
         @Html.PasswordFor(m => m.Password) 
        </li> 
        <li> 
         @Html.LabelFor(m => m.ConfirmPassword) 
        </li> 
        <li> 
         @Html.PasswordFor(m => m.ConfirmPassword) 
        </li> 
       </ol> 
       <table style="width: 70%;"> 
        <tr> 
         <th>@Html.LabelFor(m => m.NomRole)</th> 
         <th>@Html.LabelFor(m => m.NomPersonne)</th> 
        </tr> 
        <tr> 
         <td> 
          <div id="RolesOutput"></div> 
         </td> 
         <td> 
          <div id="UsersOutput"></div> 
         </td> 
        </tr> 
       </table> 
       <br /> 
       @* ******* Ajout de 2 champs cachés pour récupérer les valeurs: Rôle/Code Demandeur/Conseiller ******************** *@ 
       @* ********* Peut être remplacé par l'accès direct aux listes déroulantes avec @Html... ************************ *@ 
       @Html.Hidden("NomRole", "Demandeurs") 
       @Html.Hidden("NomPersonne") 
       <input type="submit" value="Valider" id="btnValider" /> 
      </fieldset> 
     } 
     <script> 
      //*** Fonction pour assigner les rôle et nom d'utilisateur dans des contrôles chachées du formulaire *** 
      function RecuppererRoleEtNomUtilisateur(codeDdeur) { 
       //*** Récuoère la valeur du rôle choisi *** 
       var r = document.getElementById("cbxRolesOutput"); 
       var strRole = r.options[r.selectedIndex].value; 

       //*** Assigne les choix aux contrôles cachés *** 
       $('#NomRole').val(strRole); 
       $('#NomPersonne').val(codeDdeur); 
      } 

     </script> 
     <style> 
      li { 
       padding: 10px 0px 5px 0px; 
      } 
     </style> 

     @section Scripts { 
      @Scripts.Render("~/bundles/jqueryval") 
     } 

    </body> 
    </html>        

私のコントローラ:

[HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public ActionResult Register(RegisterModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      bool erreur = false; 

      // Attempt to register the user 
      try 
      { 
       //************* Création du nouveau compte ******************** 
       WebSecurity.CreateUserAndAccount(model.UserName, model.Password); 
       //WebSecurity.Login(model.UserName, model.Password); 
      } 
      catch (MembershipCreateUserException e) 
      { 
       erreur = true; 
       ModelState.AddModelError("", ErrorCodeToString(e.StatusCode)); 
      } 
      finally 
      { 
       //************* S'assurer que l'utilisateur a été créé ***************** 
       if (erreur == false) 
       { 
        try 
        { 
         //***************** Association du nouveau compte d'utilisateur avec le rôle ************* 
         RoleAddToUser(model.NomRole, model.UserName); 
         //***************** Association du nouveau compte d'utilisateur avec le demandeur/conseiller ************* 
         var i = db.spGetUsrID(model.UserName).ToArray(); 
         Conseillers_Demandeurs_Utilisateurs lienUtilDdeur_Cons = new Conseillers_Demandeurs_Utilisateurs() 
         { 
          UserId = (int)i[0], 
          Code_Demandeur_Conseiller = model.NomPersonne, 
          Actif_Inactif = true, 
          Dte_Saisie = DateTime.Now, 
          UserId1 = 1 //******************* UserId = loanDdeur.UserId; 
         }; 
         db.Conseillers_Demandeurs_Utilisateurs.Add(lienUtilDdeur_Cons); 
         db.SaveChanges(); 
        } 

        catch (Exception e) 
        { 
         throw e; 
        } 
       } 
      } 
      return RedirectToAction("Account", "Register"); 
     } 
     // If we got this far, something failed, redisplay form 
     return View(model); 
    } 

マイモデル:以下に示すように

   public class RegisterModel 
    { 
     [Required] 
     [Display(Name = "Utilisateur")] 
     public string UserName { get; set; } 

     [Required] 
     [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)] 
     [DataType(DataType.Password)] 
     [Display(Name = "Mot de passe")] 
     public string Password { get; set; } 

     [DataType(DataType.Password)] 
     [Display(Name = "Confirmation du mot de passe")] 
     [Compare("Password", ErrorMessage = "Le mot de passe et sa confirmation ne correspondent pas.")] 
     public string ConfirmPassword { get; set; } 

     [Required] 
     [Display(Name = "Role")] 
     public string NomRole { get; set; } 

     [Required] 
     [Display(Name = "Personne")] 
     public string NomPersonne { get; set; } 

    } 
+0

あなたは最終的にブロックを悪用しています。例外がスローされるので、最終的に 'erreur'条件のために実行されません。 – OctoCode

+0

コントローラの最初の行にブレークポイントを置き、そこに何が起こっているかを段階的にチェックしてください。 –

+0

新しいモデルでデータベースを更新しましたか? –

答えて

0

あなたはcatchブロックを更新する可能性があります:

私の見解は以下の通りです

... 
catch (MembershipCreateUserException e) 
{ 
    erreur = true; 
    ModelState.AddModelError("", ErrorCodeToString(e.StatusCode)); 
    return View(model); 
} 

一方、jQuery Unobtrusive Validationを使用して、フォームを送信する前に関連するフィールドを検証することをお勧めします。これが役立つことを願って...

+0

ありがとう、 それは私が最後にやったことで、フォーム内で自分のフィールドをチェックしました。 しかし、私は送信ボタンが私のコントローラコードを実行することができません。 – Patrice

+0

** Html.BeginForm(...)**にコントローラ名とアクション名を指定する必要があります。 –

+0

一方、回答が役に立つ場合は、回答として選択して投票することを忘れないでください。ありがとう... –