Asp.net mvc 身份登记用户
我的MVC4应用程序中的注册用户有问题 我已经创建了一个带有身份框架的CMS,如果我让一个用户直接在数据库中登录,则登录工作正常 用户以“管理员”身份登录,可以访问我的注册页面以创建新用户 问题是,当我试图提交登记表时,它会显示如下内容: 一个或多个实体的验证失败。有关详细信息,请参阅“EntityValidationErrors”属性 我已经尝试过调试,似乎它能正确地获取所有输入 我对所有这些东西都很陌生,所以如果我的代码乱七八糟,我很抱歉 希望你的专业人士能帮助新手:) 我的代码如下所示:Asp.net mvc 身份登记用户,asp.net-mvc,entity-framework,Asp.net Mvc,Entity Framework,我的MVC4应用程序中的注册用户有问题 我已经创建了一个带有身份框架的CMS,如果我让一个用户直接在数据库中登录,则登录工作正常 用户以“管理员”身份登录,可以访问我的注册页面以创建新用户 问题是,当我试图提交登记表时,它会显示如下内容: 一个或多个实体的验证失败。有关详细信息,请参阅“EntityValidationErrors”属性 我已经尝试过调试,似乎它能正确地获取所有输入 我对所有这些东西都很陌生,所以如果我的代码乱七八糟,我很抱歉 希望你的专业人士能帮助新手:) 我的代码如下所示:
// POST: /Account/Register
[HttpPost]
[Authorize(Roles = "Admin")]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser() { UserName = model.UserName };
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
await SignInAsync(user, isPersistent: false);
return RedirectToAction("Index", "Home");
}
else
{
AddErrors(result);
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
//POST:/Account/Register
[HttpPost]
[授权(Roles=“Admin”)]
[ValidateAntiForgeryToken]
公共异步任务寄存器(RegisterViewModel模型)
{
if(ModelState.IsValid)
{
var user=new ApplicationUser(){UserName=model.UserName};
var result=await UserManager.CreateAsync(用户、模型、密码);
if(result.successed)
{
等待信号同步(用户,ispersist:false);
返回重定向到操作(“索引”、“主页”);
}
其他的
{
加法器(结果);
}
}
//如果我们走到这一步,有些东西失败了,重新显示形式
返回视图(模型);
}
这是我的帐户模型
> using Jagtside.Models; using
> Microsoft.AspNet.Identity.EntityFramework; using
> System.Collections.Generic; using
> System.ComponentModel.DataAnnotations;
namespace Jagtside.Models
{
public class ManageUserViewModel
{
[Required]
[DataType(DataType.Password)]
[Display(Name = "Gamle password")]
public string OldPassword { get; set; }
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Nyt password")]
public string NewPassword { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirm new password")]
[Compare("NewPassword", ErrorMessage = "De to passwords matcher ikke hinanden, prøv igen")]
public string ConfirmPassword { get; set; }
}
public class LoginViewModel
{
[Required]
[Display(Name = "Brugernavn")]
public string UserName { get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[Display(Name = "Husk mig?")]
public bool RememberMe { get; set; }
}
public class RegisterViewModel
{
[Required]
[Display(Name = "Brugernavn")]
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 = "Password")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Bekræft password")]
[Compare("Password", ErrorMessage = "De to passwords matcher ikke hinanden, prøv igen")]
public string ConfirmPassword { get; set; }
[Required]
[Display(Name = "Email")]
[DataType(DataType.EmailAddress)]
public string Email { get; set; }
// New Fields added to extend Application User class:
[Required]
[Display(Name = "First Name")]
public string FirstName { get; set; }
[Required]
[Display(Name = "Last Name")]
public string LastName { get; set; }
// Return a pre-poulated instance of AppliationUser:
public ApplicationUser GetUser()
{
var user = new ApplicationUser()
{
UserName = this.UserName,
FirstName = this.FirstName,
LastName = this.LastName,
Email = this.Email,
};
return user;
}
}
public class EditUserViewModel
{
public EditUserViewModel() { }
// Allow Initialization with an instance of ApplicationUser:
public EditUserViewModel(ApplicationUser user)
{
this.UserName = user.UserName;
this.FirstName = user.FirstName;
this.LastName = user.LastName;
this.Email = user.Email;
}
[Required]
[Display(Name = "Brugernavn")]
public string UserName { get; set; }
[Required]
[Display(Name = "Navn")]
public string FirstName { get; set; }
[Required]
[Display(Name = "Efternavn")]
public string LastName { get; set; }
[Required]
public string Email { get; set; }
}
public class SelectUserRolesViewModel
{
public SelectUserRolesViewModel()
{
this.Roles = new List<SelectRoleEditorViewModel>();
}
// Enable initialization with an instance of ApplicationUser:
public SelectUserRolesViewModel(ApplicationUser user) : this()
{
this.UserName = user.UserName;
this.FirstName = user.FirstName;
this.LastName = user.LastName;
var Db = new ApplicationDbContext();
// Add all available roles to the list of EditorViewModels:
var allRoles = Db.Roles;
foreach(var role in allRoles)
{
// An EditorViewModel will be used by Editor Template:
var rvm = new SelectRoleEditorViewModel(role);
this.Roles.Add(rvm);
}
// Set the Selected property to true for those roles for
// which the current user is a member:
foreach(var userRole in user.Roles)
{
var checkUserRole = this.Roles.Find(r => r.RoleName == userRole.Role.Name);
checkUserRole.Selected = true;
}
}
public string UserName { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public List<SelectRoleEditorViewModel> Roles { get; set; }
}
// Used to display a single role with a checkbox, within a list structure:
public class SelectRoleEditorViewModel
{
public SelectRoleEditorViewModel() {}
public SelectRoleEditorViewModel(IdentityRole role)
{
this.RoleName = role.Name;
}
public bool Selected { get; set; }
[Required]
public string RoleName { get; set;}
}
>使用Jagtside.Models;使用
>Microsoft.AspNet.Identity.EntityFramework;使用
>System.Collections.Generic;使用
>System.ComponentModel.DataAnnotations;
名称空间Jagtside.Models
{
公共类ManageUserViewModel
{
[必需]
[数据类型(数据类型.密码)]
[显示(Name=“Gamle密码”)]
公共字符串OldPassword{get;set;}
[必需]
[StringLength(100,ErrorMessage={0}的长度必须至少为{2}个字符。”,MinimumLength=6)]
[数据类型(数据类型.密码)]
[显示(Name=“Nyt密码”)]
公共字符串NewPassword{get;set;}
[数据类型(数据类型.密码)]
[显示(Name=“确认新密码”)]
[比较(“NewPassword”,ErrorMessage=“De to passwords matcher ike hinanden,prøv igen”)]
公共字符串ConfirmPassword{get;set;}
}
公共类LoginView模型
{
[必需]
[显示(Name=“Brugernavn”)]
公共字符串用户名{get;set;}
[必需]
[数据类型(数据类型.密码)]
[显示(Name=“密码”)]
公共字符串密码{get;set;}
[显示(Name=“外壳mig?”)]
公共布尔记忆{get;set;}
}
公共类RegisterViewModel
{
[必需]
[显示(Name=“Brugernavn”)]
公共字符串用户名{get;set;}
[必需]
[StringLength(100,ErrorMessage={0}的长度必须至少为{2}个字符。”,MinimumLength=6)]
[数据类型(数据类型.密码)]
[显示(Name=“密码”)]
公共字符串密码{get;set;}
[数据类型(数据类型.密码)]
[显示(Name=“Bekræft密码”)]
[比较(“Password”,ErrorMessage=“De to passwords matcher ike hinanden,prøv igen”)]
公共字符串ConfirmPassword{get;set;}
[必需]
[显示(Name=“电子邮件”)]
[数据类型(数据类型.电子邮件地址)]
公共字符串电子邮件{get;set;}
//添加了新字段以扩展应用程序用户类:
[必需]
[显示(Name=“First Name”)]
公共字符串名{get;set;}
[必需]
[显示(Name=“Last Name”)]
公共字符串LastName{get;set;}
//返回AppliationUser的预发布实例:
公共应用程序用户GetUser()
{
var user=new ApplicationUser()
{
UserName=this.UserName,
FirstName=this.FirstName,
LastName=this.LastName,
Email=this.Email,
};
返回用户;
}
}
公共类EditUserViewModel
{
public EditUserViewModel(){}
//允许使用ApplicationUser的实例进行初始化:
公共EditUserViewModel(应用程序用户)
{
this.UserName=user.UserName;
this.FirstName=user.FirstName;
this.LastName=user.LastName;
this.Email=user.Email;
}
[必需]
[显示(Name=“Brugernavn”)]
公共字符串用户名{get;set;}
[必需]
[显示(Name=“Navn”)]
公共字符串名{get;set;}
[必需]
[显示(Name=“Efternavn”)]
公共字符串LastName{get;set;}
[必需]
公共字符串电子邮件{get;set;}
}
公共类SelectUserRolesViewModel
{
public SelectUserRolesViewModel()
{
this.Roles=新列表();
}
//使用ApplicationUser的实例启用初始化:
public SelectUserRolesViewModel(ApplicationUser用户):this()
{
this.UserName=user.UserName;
this.FirstName=user.FirstName;
this.LastName=user.LastName;
var Db=new ApplicationDbContext();
//将所有可用角色添加到EditorViewModels列表中:
var allRoles=Db.Roles;
foreach(所有角色中的var角色)
{
//编辑器模板将使用编辑器视图模型:
var rvm=新的SelectRoleEditorViewModel(角色);
此.Roles.Add(rvm);
}
//将这些角色的选定属性设置为true
//当前用户是哪个成员:
foreach(user.Roles中的var userRole)
{
var checkUserRole=this.Roles.Find(r=>r.RoleName==userRole.Role.Name);
checkUserRole.Selected=true;
}
}
公共字符串用户名{get;set;}
公共字符串名{get;set;}
公共字符串LastName{get;set;}
公共列表角色{get;set;}
}
//用于在列表结构中显示带有复选框的单个角色:
公共类SelectRoleEditor视图模型
{
公共SelectRoleEdit
@model Jagtside.Models.RegisterViewModel
@{
ViewBag.Title = "Register";
}
<section class="section-container">
<section id="loginForm">
@using (Html.BeginForm("Register", "Account", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
@Html.AntiForgeryToken()
<h2 class="heading">Opret ny bruger</h2>
@Html.ValidationSummary()
<section id="login-form-container">
<!-- Brugernavn -->
<section class="input-box">
@*@Html.LabelFor(m => m.UserName, new { @class = "" })*@
@Html.TextBoxFor(m => m.UserName, new { @class = "form-input", @placeholder = "Brugernavn" })
@*<input type="text" name="username" id="username" class="form-input" placeholder="Brugernavn" required /><br />*@
</section>
<!-- Password -->
<section class="input-box">
@*@Html.LabelFor(m => m.Password, new { @class = "" })*@
@Html.PasswordFor(m => m.Password, new { @class = "form-input", @placeholder = "Password" })
@*<input type="password" name="password" id="password" class="form-input" placeholder="Password" required /><br />*@
</section>
<!-- Confirm Password -->
<section class="input-box">
@*@Html.LabelFor(m => m.ConfirmPassword, new { @class = "" })*@
@Html.PasswordFor(m => m.ConfirmPassword, new { @class = "form-control", @placeholder = "Bekræft Password" })
@*<input type="password" name="ConfirmPassword" id="ConfirmPassword" class="form-input" placeholder="Bekræft password" required /><br />*@
</section>
<!-- Email -->
<section class="input-box">
@*@Html.LabelFor(m => m.Email, new { @class = "" })*@
@Html.TextBoxFor(m => m.Email, new { @class = "form-input", @placeholder="Email" })
@*<input type="text" name="email" id="email" class="form-input" placeholder="Email" required /><br />*@
</section>
<!-- Firstname -->
<section class="input-box">
@*@Html.LabelFor(m => m.FirstName)*@
@Html.TextBoxFor(m => m.FirstName, new { @class = "form-input", @placeholder="Fornavn" })
</section>
<!-- Lastname -->
<section class="input-box">
@*@Html.LabelFor(m => m.LastName)*@
@Html.TextBoxFor(m => m.LastName, new { @class = "form-input", @placeholder = "Efternavn" })
</section>
<input type="submit" class="submit-btn" value="Opret" />
</section>
}
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
</section>