"The UserId field is required" - 实体验证错误



我正在为我的MVC(5)应用程序使用基于实体框架的ASP.Net标识。

问题:

当我想注册一个新用户时,我会收到一个实体验证错误。我查看了验证错误属性,在这一行上得到了2个错误(实际上都是一样的):

         var result = await UserManager.CreateAsync(user, model.Password);

错误:

http://i62.tinypic.com/11acy0y.png

现在。。。。。我不知道这个"UserId"字段是从哪里来的。我看了IdentityUser基类,它也不属于它,只有一个"Id"字段可以正常工作。

如果需要更多信息,只需在评论plz.中提及

有人知道吗。。。。这个领域是什么?以及如何解决这个问题?

编辑:忘记提到我在dbinitializer的seed方法中创建了一个基本用户。。。。这很好。但在控制器中我得到了这个错误。

控制器&相关行动:

    //
    //POST : /Account/Register
    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> register(Register_ViewModel model)
    {
        UserManager.UserValidator = new MyUserValidation();
        //Complete User Object if Model is Valid
        if (ModelState.IsValid)
        var user = new Employee
        {
         .......
        }
        //Store Claims
            ........

                // Where i get the error
                var result = await UserManager.CreateAsync(user, model.Password);
                if (result.Succeeded)
                {
                    await SignInAsync(user, IsPersistent: false);
                    return RedirectToAction("Index", "Home");
                }
                else
                {
                    AddErrors(result);
                }                             
        }
        return View(model);
    }

视图:

     @model Univercity_Project.Models.ViewModels.Register_ViewModel
     @{
     ViewBag.Title = "Register_tab";
     Layout = "~/Views/Shared/Layout.cshtml";
     }
     <h2>Register_tab</h2>

     @using (Html.BeginForm("Register","Account",FormMethod.Post)) 
     {
     @Html.AntiForgeryToken()
     <div class="form-horizontal">
    <h4>Employee</h4>
    <hr />
        <!-- Nav tabs -->
        <ul class="nav nav-tabs" role="tablist">
          <!-- Some Nav Tabs Here! -->
        </ul>
        <!-- Tab panes -->
        <div class="tab-content">
        <!-- Nav-tabs Content  Here! -->  
        <div class="form-group">
                    <div class="col-md-offset-2 col-md-10">
                        <input type="submit" value="Submit" class="btn btn-     default" />
                    </div>
                </div>
            </div>

员工(或"ApplicationUser")模型:

  public class Employee : IdentityUser
{
    public string Employment_Number { get; set; }
    public string Gender { get; set; }
    public int National_ID { get; set; }
    public string First_Name { get; set; }
    public string Last_Name { get; set; }
    public string Father_Name { get; set; }
    public string Birth_Place { get; set; }
    public DateTime Birth_Date { get; set; }
    public string Serial_Alphabetic { get; set; }
    public int Serial_Numeric { get; set; }
    public int Number_of_People_Under_Support { get; set; }  
    //<----------------------------------------------------------------------------------------------------------->
    public virtual Employment_Status Employment_Status { get; set; }
    public int Employment_Info_ID { get; set; }
    public virtual Marriage_Status Marriage_Status { get; set; }
    public int Marriage_Info_ID { get; set; }
    public virtual Job_Status Job_Status { get; set; }
    public virtual Academic_Status Academic_Status { get; set; }
    public virtual Phone_Number Phone_Number { get; set; }
    public virtual War_Record War_Record_Info { get; set; }
    public virtual Address Address { get; set; }
    public virtual Insuarance Insuarance_Info { get; set; }

}

提前谢谢你。

好的,这里是解决方案:

在我添加Claims的部分中,我不知道我应该为UserId属性赋值,这就是我正在做的:

                    user.Claims.Add(new IdentityUserClaim() { ClaimType = ClaimTypes.Gender, ClaimValue = user.Gender});

下面是我应该做的:

                    user.Claims.Add(new IdentityUserClaim() { ClaimType = ClaimTypes.Gender, ClaimValue = user.Gender, UserId = user.Id });

您的用户POCO:的EF映射中的Id字段是否已设置为Identity

`属性(c=>c.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

编辑:

我将在这个答案中加入我的评论,这导致了解决方案:

存在引用userId的其他地方。尝试添加以下内容进行测试:user.Claims.Add(new IdentityUserClaim {UserId = user.Id}); user.Roles.Add(new IdentityUserRole {UserId = user.Id});

最新更新