【问题标题】:How get User Information from SQL Server with identity如何从具有身份的 SQL Server 获取用户信息
【发布时间】:2020-08-02 17:32:49
【问题描述】:

我正在使用 ASP.NET Core MVC。我想通过身份从 SQL Server 获取用户信息。

这是我的管理员控制器:

private ApplicationDbContext _application;
public AdminController (ApplicationDbContext application)
{
    _application = application;
}

public IActionResult ListUsers()
{
    return View(_application.Users.ToList());
}

我的看法:

{
    <td>@Html.DisplayNameFor(model => model.Id)</td>
}

但它向我显示了那个错误。

“InvalidOperationException:传递到 ViewDataDictionary 的模型项的类型为“System.Collections.Generic.List1[Microsoft.AspNetCore.Identity.IdentityUser]', but this ViewDataDictionary instance requires a model item of type 'System.Collections.Generic.IEnumerable1[WebAppMVC.ApplicationUser]”。

【问题讨论】:

    标签: sql-server asp.net-core asp.net-core-mvc identity asp.net-core-identity


    【解决方案1】:

    这是一个工作演示,请检查你的差异并进行修改:

    DbContext

    public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
            : base(options)
        {
        }
    }
    

    控制器

    public class HomeController : Controller
    {
        private readonly ApplicationDbContext _dbcontext;
    
        public HomeController( ApplicationDbContext dbcontext)
        {
            _dbcontext = dbcontext;
        }
    
        public IActionResult ListUsers()
        {
            return View(_dbcontext.Users.ToList());
        }
    }
    

    查看

    @model IEnumerable<MVCIdentityDemo3_1.Models.ApplicationUser>
    
    <table class="table">
      <thead>
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.Id)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.UserName)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.FirstName)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.LastName)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Email)
            </th>
            <th></th>
        </tr>
      </thead>
      <tbody>
        @foreach (var item in Model)
        {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Id)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.UserName)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.FirstName)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.LastName)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Email)
            </td>
            <td>
                <a asp-action="Edit" asp-route-id="@item.Id">Edit</a> |
                <a asp-action="Details" asp-route-id="@item.Id">Details</a> |
                <a asp-action="Delete" asp-route-id="@item.Id">Delete</a>
            </td>
        </tr>
        }
      </tbody>
    </table>
    

    【讨论】:

    • Tnx.It works.but 当我想再次登录时,它显示此错误 /InvalidOperationException: Cannot create a DbSet for 'IdentityUser' 因为这种类型不包含在上下文模型中。/
    • @Mohadese99 ,你的 DbContext 和 Startup 是什么?当扩展 IdenityUser 并使用 ApplicationUser 时,您应该在启动时更新您的身份服务注册,如下所示:services.AddIdentity&lt;ApplicationUser, IdentityRole&gt;() .AddEntityFrameworkStores&lt;ApplicationDbContext&gt;() .AddDefaultTokenProviders();
    【解决方案2】:

    您的 ApplicationUser 继承自 identityUser?

    检查视图响应是否与视图模型相同

    【讨论】:

      猜你喜欢
      • 2012-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-31
      • 2018-01-25
      • 2018-05-18
      • 2016-06-24
      相关资源
      最近更新 更多