我正在使用带有Identity 2的MVC 5.我创建了两个角色,一个用于管理员,一个用于供应商。我遇到的问题是注册表必须使用供应商角色中定义的属性。我无法弄清楚如何让MVC将这些角色属性用于注册目的。我已经尝试将相应的角色分配给applicationuser,但在为其分配角色后,它仍然表示它不存在。无论如何这样做,或者我将不得不将其拆分为两个注册屏幕(即一个用于处理初始用户创建,另一个用于处理角色特定实现)?
public async Task<ActionResult> Register(RegisterVendorViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser
{
UserName = model.Email,
Email = model.Email,
FirstName = model.FirstName,
LastName = model.LastName,
PhoneNumber = model.PhoneNumber,
CompanyName = model.CompanyName,
Address = model.Address,
City = model.City,
State = model.State,
PostalCode = model.PostalCode
};
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
更新:我拆分了视图,第一个视图仅处理应用程序用户的创建,而第二个视图是我将VendorUser Role字段添加到在第一个视图中创建的用户的位置。它现在出错了,并说我无法将VendorUserRole属性添加到IdentityUserRole。
错误代码“错误2参数1:无法从'Project1.Models.VendorUserRole'转换为'Microsoft.AspNet.Identity.EntityFramework.IdentityUserRole'”
我显然未能在我的角色实现中更新或覆盖某些内容。有没有人知道这可以修复的地方?我以为我改变了所有这些都能正常工作。
// POST: /Account/RegisterP2
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> RegisterP2([Bind(Include = "Id")]RegisterPart2ViewModel model)
{
if (ModelState.IsValid)
{
var vendorUser = new VendorUserRole()
{
Id = model.Id,
CompanyName = model.CompanyName,
Title = model.Title,
Address = model.Address,
City = model.City,
State = model.State,
PostalCode = model.PostalCode,
};
var user = await UserManager.FindByIdAsync(vendorUser.Id);
**user.Roles.Add(vendorUser);**
更新:在我尝试更多代码之前,我显然需要更多地了解身份;有人可以告诉我,我的基本前提是否正确?:
我需要两个不同的用户:具有不同属性的供应商和管理员,我有一个用户类ApplicationUser,它带有Identity 2.我创建了具有不同属性的角色,我现在卡住了。我无法弄清楚如何将不同的角色引用到主用户类。根据我在.NET中的研究,用户只是登录,退出等实体。正确定义的角色应该允许您将角色附加到用户实例,从而创建必要的角色。
我希望我没有根据错误的前提进行数小时的编码......
答案 0 :(得分:0)
这是因为在用户注册之前,他的用户尚未创建,因此他尚未存在的用户无法拥有角色。你应该有两个单独的视图,使用相同的模型和控制器,但你应该知道用户还不存在。