您如何从ASP.NET身份查看自定义字段



我在我的身份模型中创建了一个身份证:

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中定义了用户)。我似乎无法弄清楚自定义字段为什么不起作用。

原因是您使用的是默认身份用户,而不是自己的

更改

@model IEnumerable<Microsoft.AspNet.Identity.EntityFramework.IdentityUser>

to:

@model IEnumerable<namespace.to.my.User>

实际上我已经解决了。我不需要:

@model IEnumerable<Microsoft.AspNet.Identity.EntityFramework.IdentityUser>

因为我已经将列表传达到视图中。删除它后,一切都很好。

晚上睡眠的好处。

相关内容

  • 没有找到相关文章

最新更新