こんにちは、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; }
}
あなたは最終的にブロックを悪用しています。例外がスローされるので、最終的に 'erreur'条件のために実行されません。 – OctoCode
コントローラの最初の行にブレークポイントを置き、そこに何が起こっているかを段階的にチェックしてください。 –
新しいモデルでデータベースを更新しましたか? –