【发布时间】:2021-12-28 13:47:11
【问题描述】:
我创建了这个项目,它有一个使用身份的注册和登录页面。我关注了这个视频。视频:https://www.youtube.com/watch?v=CzRM-hOe35o
我想测试一个想法,所以我想显示我在数据库中的用户信息。但是,我想出如何显示信息的唯一方法是使用 _LoginPartial.cshtml 文件中的用户管理器选项 (@UserManager.GetUserAsync(User).Result.FirstName)。在我了解更多信息的过程中,我看到了这个视频,它教你如何用表格显示数据库中的信息。视频:https://www.youtube.com/watch?v=5wLfTRx2-FI
我有一些问题,他使用的是 Sqlite,而我使用的是 Microsoft SQL Server Management Studio 18。我尝试按照他的方式将列表添加到家庭控制器中。但是,它并没有像他那样工作
为了使用他从数据库中显示信息的方式,我该如何适应?或者有没有更简单的方式来显示信息?
这是我的代码。如果您需要更多信息,请告诉我
Index.cshtml:
@{
ViewData["Title"] = "Home Page";
}
<div class="text-center">
<h1 class="display-4">Welcome</h1>
<p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div>
家庭控制器:
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using The_Bank_of_Cardinal.Areas.Identity.Data;
using The_Bank_of_Cardinal.Models;
namespace The_Bank_of_Cardinal.Controllers
{
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
}
public IActionResult Index()
{
return View();
}
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 });
}
}
}
位于 Areas>Identity>Data 文件夹中的模型
CardinalUser.cs:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Identity;
namespace The_Bank_of_Cardinal.Areas.Identity.Data
{
// Add profile data for application users by adding properties to the CardinalUser class
public class CardinalUser : IdentityUser
{
[PersonalData]
[Column(TypeName ="nvarchar(100)")]
public string FirstName { get; set; }
[PersonalData]
[Column(TypeName = "nvarchar(100)")]
public string LastName { get; set; }
[PersonalData]
[Column(TypeName = "nvarchar(500)")]
public string Street { get; set; }
[PersonalData]
[Column(TypeName = "nvarchar(100)")]
public string City { get; set; }
[PersonalData]
[Column(TypeName = "nvarchar(100)")]
public string State { get; set; }
[PersonalData]
[Column(TypeName = "nvarchar(100)")]
public string ZipCode { get; set; }
[PersonalData]
[Column(TypeName = "nvarchar(100)")]
public string LoginName { get; set; }
[PersonalData]
[Column(TypeName = "nvarchar(100)")]
public string SSN { get; set; }
[PersonalData]
[Column(TypeName = "int")]
public int AccountBalance { get; set; }
}
}
CardinalDbContext 也位于同一文件夹中:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using The_Bank_of_Cardinal.Areas.Identity.Data;
namespace The_Bank_of_Cardinal.Data
{
public class CardinalDbContext : IdentityDbContext<CardinalUser>
{
public CardinalDbContext(DbContextOptions<CardinalDbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
// Customize the ASP.NET Identity model and override the defaults if needed.
// For example, you can rename the ASP.NET Identity table names and more.
// Add your customizations after calling base.OnModelCreating(builder);
}
}
}
_LoginPartial.cshtml:
@using Microsoft.AspNetCore.Identity
@using The_Bank_of_Cardinal.Areas.Identity.Data
@inject SignInManager<CardinalUser> SignInManager
@inject UserManager<CardinalUser> UserManager
<ul class="navbar-nav">
@if (SignInManager.IsSignedIn(User))
{
<li class="nav-item">
<a id="manage" class="nav-link text-dark" asp-area="Identity" asp-page="/Account/Manage/Index" title="Manage">Hello @UserManager.GetUserAsync(User).Result.FirstName @UserManager.GetUserAsync(User).Result.LastName Balance: $@UserManager.GetUserAsync(User).Result.AccountBalance </a>
</li>
<li class="nav-item">
<form id="logoutForm" class="form-inline" asp-area="Identity" asp-page="/Account/Logout" asp-route-returnUrl="@Url.Action("Index", "Home", new { area = "" })">
<button id="logout" type="submit" class="nav-link btn btn-link text-dark">Logout</button>
</form>
</li>
}
else
{
<li class="nav-item">
<a class="nav-link text-dark" id="register" asp-area="Identity" asp-page="/Account/Register">Register</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" id="login" asp-area="Identity" asp-page="/Account/Login">Login</a>
</li>
}
</ul>
程序.cs:
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace The_Bank_of_Cardinal
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
}
startup.cs:
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace The_Bank_of_Cardinal
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddRazorPages();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});
}
}
}
【问题讨论】:
-
在 Startup.cs 中有一个 ConfigureService 方法。将您的数据库上下文添加到那里的 SQL 提供程序: services.AddDbContext
(o => { o.UseSqlServer("MyConnectionString"); }); -
我可以看到您在_LoginPartial.cshtml中有代码来显示用户信息。您是否收到任何错误或输出未显示?
-
@rahatur 我正在从登录用户那里获取信息。但我想显示数据库中的所有内容。不仅来自登录用户
-
FirstName、LAstName、Balance 来自数据库对吗?
-
@Rahatur 是的
标签: c# asp.net-mvc database sqlite asp.net-identity