如何在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
相关产品推荐
相关产品推荐

