Asp.net mvc 身份登记用户

Asp.net mvc 身份登记用户,asp.net-mvc,entity-framework,Asp.net Mvc,Entity Framework,我的MVC4应用程序中的注册用户有问题 我已经创建了一个带有身份框架的CMS,如果我让一个用户直接在数据库中登录,则登录工作正常 用户以“管理员”身份登录,可以访问我的注册页面以创建新用户 问题是,当我试图提交登记表时,它会显示如下内容: 一个或多个实体的验证失败。有关详细信息,请参阅“EntityValidationErrors”属性 我已经尝试过调试,似乎它能正确地获取所有输入 我对所有这些东西都很陌生,所以如果我的代码乱七八糟,我很抱歉 希望你的专业人士能帮助新手:) 我的代码如下所示:

我的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>