如何查看ASP.NET Identity中的自定义字段?

时间:2016-06-20 16:09:11

标签: c# asp.net asp.net-identity

我在我的身份模型中创建了一个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中定义了用户)。我似乎无法弄清楚自定义字段无法正常工作的原因。

2 个答案:

答案 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>

因为我已将列表传递到视图中。一旦我删除它,它一切正常。

晚安睡眠的好处。