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