C# &引用;UserId字段是必需的";-实体验证错误
我正在为我的MVC(5)应用程序使用基于实体框架的ASP.NETIdentity 问题: 当我想注册一个新用户时,我会得到一个实体验证错误。 我查看了validation error属性,在这一行中得到了2个错误(实际上都是相同的):C# &引用;UserId字段是必需的";-实体验证错误,c#,asp.net,asp.net-mvc,entity-framework,asp.net-identity,C#,Asp.net,Asp.net Mvc,Entity Framework,Asp.net Identity,我正在为我的MVC(5)应用程序使用基于实体框架的ASP.NETIdentity 问题: 当我想注册一个新用户时,我会得到一个实体验证错误。 我查看了validation error属性,在这一行中得到了2个错误(实际上都是相同的): var result = await UserManager.CreateAsync(user, model.Password); 错误: 现在……我不知道这个“UserId”字段来自哪里。 我查看了IdentityUser基类,它也不属于那
var result = await UserManager.CreateAsync(user, model.Password);
错误:
现在……我不知道这个“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);
}
//
//职位:/Account/Register
[HttpPost]
[异名]
[ValidateAntiForgeryToken]
公共异步任务寄存器(寄存器\视图模型)
{
UserManager.UserValidator=新的MyUserValidation();
//如果模型有效,则完成用户对象
if(ModelState.IsValid)
var user=新员工
{
.......
}
//商店索赔
........
//我从哪里得到错误
var result=await UserManager.CreateAsync(用户、模型、密码);
if(result.successed)
{
等待信号同步(用户,ispersist:false);
返回重定向到操作(“索引”、“主页”);
}
其他的
{
加法器(结果);
}
}
返回视图(模型);
}
视图:
@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>
@model Univercity\u Project.Models.ViewModels.Register\u ViewModel
@{
ViewBag.Title=“注册\选项卡”;
Layout=“~/Views/Shared/Layout.cshtml”;
}
“注册”选项卡
@使用(Html.BeginForm(“Register”、“Account”、FormMethod.Post))
{
@Html.AntiForgeryToken()
雇员
员工(或“应用程序用户”)模型:
public类员工:IdentityUser
{
公共字符串\u编号{get;set;}
公共字符串{get;set;}
公共国际标识{get;set;}
公共字符串First_Name{get;set;}
公共字符串Last_Name{get;set;}
公共字符串父名称{get;set;}
公共字符串Birth_Place{get;set;}
公共日期时间出生日期{get;set;}
公共字符串序列_字母{get;set;}
public int Serial_Numeric{get;set;}
在{get;set;}支持下的{u人}的公共整数{u
//
公共虚拟就业状态就业状态{get;set;}
公共int就业信息ID{get;set;}
公共虚拟婚姻状态婚姻状态{get;set;}
公共婚姻信息ID{get;set;}
公共虚拟作业\状态作业\状态{get;set;}
公共虚拟学术状态学术状态{get;set;}
公共虚拟电话号码电话号码{get;set;}
公共虚拟战争记录战争记录信息{get;set;}
公共虚拟地址{get;set;}
公共虚拟阻抗阻抗阻抗信息{get;set;}
}
提前感谢您。在您的用户POCO的EF映射中,Id字段是否已设置为Identity: `属性(c=>c.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity) 编辑: 我将在这个答案中包含我的评论,这导致了解决方案: 还有其他引用用户ID的位置。请尝试将以下内容添加到测试中:
user.Claims.Add(新IdentityUserClaim{UserId=user.Id});user.Roles.Add(新IdentityUserRole{UserId=user.Id});
确定以下是解决方案:
在我添加声明的部分中,我不知道我应该为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 });
也许您可以通过添加html表单来编辑您的问题,该表单将启动发布到您的控制器。正如我所说的ID字段工作正常。我的问题是“UserId”字段。请查看具有UserId属性的IdentityUserLogin对象。试着如下设置:
user.Logins.Add(new IdentityUserLogin()){LoginProvider=youValue1,ProviderKey=youValue2,UserId=user.Id});
执行了此操作。仍然收到错误。请发布员工模型定义添加的员工模型。另外,注册视图有一个视图模型。需要吗?
user.Claims.Add(new IdentityUserClaim() { ClaimType = ClaimTypes.Gender, ClaimValue = user.Gender, UserId = user.Id });