You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ASP.NET Core MVC中使用MS SQL数据库以表格展示用户信息

解决步骤

1. 适配逻辑说明

你不需要单独适配SQLite和SQL Server的差异,ASP.NET Core Identity + EF Core已经封装了底层数据库的操作差异,只要你的项目连接字符串配置的是SQL Server,直接用Identity提供的UserManager或者自定义的CardinalDbContext就能直接查询用户数据,不需要修改查询逻辑。

2. 修改HomeController注入依赖并查询用户数据

修改后的HomeController代码如下:

using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Identity;
using The_Bank_of_Cardinal.Areas.Identity.Data;
using The_Bank_of_Cardinal.Data;
using The_Bank_of_Cardinal.Models;

namespace The_Bank_of_Cardinal.Controllers
{
    public class HomeController : Controller
    {
        private readonly ILogger<HomeController> _logger;
        private readonly UserManager<CardinalUser> _userManager;
        private readonly CardinalDbContext _context;

        // 注入UserManager和CardinalDbContext
        public HomeController(ILogger<HomeController> logger, UserManager<CardinalUser> userManager, CardinalDbContext context)
        {
            _logger = logger;
            _userManager = userManager;
            _context = context;
        }

        public async Task<IActionResult> Index()
        {
            // 两种查询方式任选其一,都自动适配SQL Server
            // 方式1:用Identity原生的UserManager查询,更符合规范
            var userList = _userManager.Users.ToList();
            // 方式2:直接用DbContext查询
            // var userList = await _context.Users.ToListAsync();
            
            return View(userList);
        }

        public IActionResult Privacy()
        {
            return View();
        }

        [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
        public IActionResult Error()
        {
            return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
        }
    }
}

如果运行时提示无法解析CardinalDbContext的服务,在Startup.cs的ConfigureServices方法中补加以下配置:

services.AddDbContext<CardinalDbContext>(options =>
    options.UseSqlServer(Configuration.GetConnectionString("CardinalDbContextConnection")));

同时确认appsettings.json中的ConnectionStrings节点已经配置了正确的SQL Server连接字符串。

3. 修改Index.cshtml渲染用户表格

修改后的Index.cshtml代码如下:

@model List<The_Bank_of_Cardinal.Areas.Identity.Data.CardinalUser>
@{
    ViewData["Title"] = "Home Page";
}

<div class="text-center">
    <h1 class="display-4">Welcome</h1>
    <p>Learn about <a href="https://learn.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div>

<!-- 新增用户列表表格 -->
@if (Model != null && Model.Any())
{
    <div class="container mt-5">
        <h3>系统用户信息</h3>
        <table class="table table-bordered table-striped">
            <thead>
                <tr>
                    <th>姓名</th>
                    <th>邮箱</th>
                    <th>手机号</th>
                    <th>所在城市</th>
                    <th>账户余额</th>
                </tr>
            </thead>
            <tbody>
                @foreach (var user in Model)
                {
                    <tr>
                        <td>@user.FirstName @user.LastName</td>
                        <td>@user.Email</td>
                        <td>@user.PhoneNumber</td>
                        <td>@user.City</td>
                        <td>@user.AccountBalance.ToString("C")</td>
                    </tr>
                }
            </tbody>
        </table>
    </div>
}

补充说明

如果你只需要展示当前登录用户的信息,不需要查询全量用户列表,直接在视图中注入UserManager获取当前用户信息即可,和_LoginPartial.cshtml中的用法一致,注意避免直接调用.Result,优先在Controller中查询数据后传给视图。

内容的提问来源于stack exchange,提问作者Goku223344

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 12:36:03