我在我的身份模型中创建了一个IdentityUser:
public class User : IdentityUser
{
// *** Custom field variables for users ***
public string FirstName { get; set; }
public string Surname { get; set; }
public string Position { get; set; }
public string Company { get; set; }
public string Country { get; set; }
public DateTime AccountOpen { get; set; }
// *** Custom field variables for users ***
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<User> manager)
{
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
return userIdentity;
}
}
public class ApplicationDbContext : IdentityDbContext<User>
{
public ApplicationDbContext()
: base("DefaultConnection", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
// *** Modify table and primary key names ***
protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<User>().ToTable("User").Property(p => p.Id).HasColumnName("UserID");
modelBuilder.Entity<IdentityUserRole>().ToTable("UserRole");
modelBuilder.Entity<IdentityUserLogin>().ToTable("UserLogin");
modelBuilder.Entity<IdentityUserClaim>().ToTable("UserClaim").Property(p => p.Id).HasColumnName("UserClaimID");
modelBuilder.Entity<IdentityRole>().ToTable("Role").Property(p => p.Id).HasColumnName("RoleID");
}
// *** Modify table and primary key names ***
}
我创建了一个简单的UserController,允许我简单地查看数据库中的所有用户。我打算用它来管理网站。
using System;
using System.Linq;
using System.Web.Mvc;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using acme.Models;
namespace acme.Controllers
{
public class UsersController : Controller
{
ApplicationDbContext context = new ApplicationDbContext();
// GET: Users
public ActionResult Index()
{
var users = context.Users.ToList();
return View(users);
}
}
}
最后,我创建了视图页面:
@model IEnumerable<Microsoft.AspNet.Identity.EntityFramework.IdentityUser>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
@foreach (var user in Model)
{
<p><strong>@user.UserName</strong></p>
<p>@user.FirstName</p>
}
虽然@ user.UserName工作正常,但@ user.FirstName根本不工作并且生成错误'IdentityUser'不包含定义......
我已经检查过并且数据库看起来很好(因为我在RegisterViewModel中定义了用户)。我似乎无法弄清楚自定义字段无法正常工作的原因。
答案 0 :(得分:1)
原因是您使用的是默认的IdentityUser,而非您自己的
变化
@model IEnumerable<Microsoft.AspNet.Identity.EntityFramework.IdentityUser>
为:
@model IEnumerable<namespace.to.my.User>
答案 1 :(得分:0)
其实我已经解决了。我不需要:
@model IEnumerable<Microsoft.AspNet.Identity.EntityFramework.IdentityUser>
因为我已将列表传递到视图中。一旦我删除它,它一切正常。
晚安睡眠的好处。