C# MVC向注册表中添加更多必填字段

C# MVC向注册表中添加更多必填字段,c#,asp.net-mvc,C#,Asp.net Mvc,你好, 我在我的注册视图中添加了两个自定义字段,并修改了注册控制器和帐户模型(见下文),使这两个字段成为必需字段。 我陷入了这样的境地: 1-我的2个额外字段未验证,即使密码和用户名字段已验证。 2-我的控制器代码不再执行 有人有主意吗 我的看法如下: @model FEC.Models.RegisterModel @{ ViewBag.Title = "Utilisateur"; } <!DOCTYPE html> <

你好,

我在我的注册视图中添加了两个自定义字段,并修改了注册控制器和帐户模型(见下文),使这两个字段成为必需字段。 我陷入了这样的境地: 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>                            
我的模型:

             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; }

   }

您可以更新catch块,如下所示:

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

另一方面,我还建议您使用,以便在提交表单之前验证相关字段。希望这有帮助……

您误用了finally block。由于“erreur”条件,最终引发的异常从未执行。将断点放在控制器的第一行,并逐步检查那里发生了什么。您是否使用新模型更新了数据库?您好,我在第一行有一个断点。我的提交按钮甚至没有找到。谢谢,这就是我最后做的,并在表单中检查了我的字段。但我仍然无法通过“提交”按钮运行我的控制器代码。您需要以Html.BeginForm(…)提供控制器和操作名称。另一方面,如果答案对您有帮助,请不要忘记选择它作为答案并投票。谢谢
...
catch (MembershipCreateUserException e)
{
    erreur = true;
    ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
    return View(model);
}