"The UserId field is required" - 实体验证错误
"The UserId field is required" - entity validation error
我正在为我的 MVC(5) 应用程序使用 ASP.Net 基于 Entity framework 的身份。
问题:
当我想注册新用户时,出现实体验证错误。
我查看了验证错误 属性 并在这一行收到 2 个错误(实际上都是一样的):
var result = await UserManager.CreateAsync(user, model.Password);
错误:
http://i62.tinypic.com/11acy0y.png
现在.....我不知道这个 'UserId' 字段来自哪里。
我查看了 IdentityUser base 类,它也不属于那个,只有一个 "Id" 字段可以正常工作。
如果需要更多信息,请在评论中提及。
所以有没有人知道....这个字段是什么?以及如何解决这个问题?
编辑:
忘了提到我在 dbinitializer 的种子方法中创建了一个基本用户....工作正常。但是在控制器中我得到了这个错误。
控制器及相关操作:
//
//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; }
}
提前谢谢你。
您的用户 POCO 的 EF 映射中的 Id 字段是否已设置为身份:
`属性(c => c.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
编辑:
我会在这个答案中包含我的评论,这导致了解决方案:
还有其他地方引用了userId。尝试添加以下内容进行测试:
user.Claims.Add(new IdentityUserClaim {UserId = user.Id}); user.Roles.Add(new IdentityUserRole {UserId = user.Id});
好的,这是解决方案:
在我添加 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 });
我正在为我的 MVC(5) 应用程序使用 ASP.Net 基于 Entity framework 的身份。
问题:
当我想注册新用户时,出现实体验证错误。 我查看了验证错误 属性 并在这一行收到 2 个错误(实际上都是一样的):
var result = await UserManager.CreateAsync(user, model.Password);
错误:
http://i62.tinypic.com/11acy0y.png
现在.....我不知道这个 'UserId' 字段来自哪里。 我查看了 IdentityUser base 类,它也不属于那个,只有一个 "Id" 字段可以正常工作。
如果需要更多信息,请在评论中提及。
所以有没有人知道....这个字段是什么?以及如何解决这个问题?
编辑: 忘了提到我在 dbinitializer 的种子方法中创建了一个基本用户....工作正常。但是在控制器中我得到了这个错误。
控制器及相关操作:
//
//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; }
}
提前谢谢你。
您的用户 POCO 的 EF 映射中的 Id 字段是否已设置为身份:
`属性(c => c.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
编辑:
我会在这个答案中包含我的评论,这导致了解决方案:
还有其他地方引用了userId。尝试添加以下内容进行测试:
user.Claims.Add(new IdentityUserClaim {UserId = user.Id}); user.Roles.Add(new IdentityUserRole {UserId = user.Id});
好的,这是解决方案:
在我添加 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 });