【发布时间】:2018-05-09 06:33:28
【问题描述】:
我无法读取应用程序身份用户的数据。我是初学者,你知道吗?编译时没有错误。但我无法添加新任务。
创建任务时出现错误https://localhost:44312/usertasks/Create
问题出在 GET 方法上,但用户 lis 不为空
- 结果视图 展开结果视图将枚举 IEnumerable
- [0] {lukas@wp.pl} UserTaskTest.Models.ApplicationUser AccessFailedCount 0 整数 ConcurrencyStamp "785f9a54-e7f1-4e3b-8bad-55165155d631" 字符串 电子邮件“lukas@wp.pl”字符串 EmailConfirmed false bool ExecutedUserTasks null System.Collections.Generic.ICollection ID“53f416ab-aa1e-465f-9dd4-dc32e11914ae”字符串 LockoutEnabled true bool LockoutEnd null System.DateTimeOffset? NormalizedEmail "LUKAS@WP.PL" 字符串 NormalizedUserName "LUKAS@WP.PL" 字符串 OwnedUserTasks null System.Collections.Generic.ICollection PasswordHash "AQAAAAEAACcQAAAAEIqkXlzky+4i8BsPl5Z4524B3Dj3u0RZMY2Rf5ch5l22GEMj5m0LsVgeWDAavmVO+g==" 字符串 电话号码空字符串 PhoneNumberConfirmed false bool SecurityStamp "698529ad-c47c-40f9-bdf3-c4d946cda86a" 字符串 TwoFactorEnabled false bool 用户名“lukas@wp.pl”字符串
- [1] {li@wp.pl} UserTaskTest.Models.ApplicationUser AccessFailedCount 0 整数 ConcurrencyStamp "1a9064e2-3cc9-4794-9198-81423a5d8cd2" 字符串 电子邮件“li@wp.pl”字符串 EmailConfirmed false bool ExecutedUserTasks null System.Collections.Generic.ICollection ID“970839dc-31be-4966-8f06-e664aca3622c”字符串 LockoutEnabled true bool LockoutEnd null System.DateTimeOffset? NormalizedEmail "LI@WP.PL" 字符串 NormalizedUserName "LI@WP.PL" 字符串 OwnedUserTasks null System.Collections.Generic.ICollection 密码哈希“AQAAAAEAACcQAAAAEM2KiwEfRDomBNiWXHmEtvwWEodfZDb8eaSADOGP2ZralzlnBDZEMQIsOvTk1nHMcw==”字符串 电话号码空字符串 PhoneNumberConfirmed false bool SecurityStamp "0a829111-88d7-4a8a-b65d-5582cecbe67f" 字符串 TwoFactorEnabled false bool 用户名“li@wp.pl”字符串
System.NullReferenceException:对象引用未设置为实例 一个对象。
在
Microsoft.AspNetCore.Mvc.Rendering.MultiSelectList.GetListItemsWithValueField()
在 Microsoft.AspNetCore.Mvc.Rendering.MultiSelectList.GetListItems()
在 Microsoft.AspNetCore.Mvc.Rendering.MultiSelectList.GetEnumerator()
public class UserTask
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int UserTaskID { get; set; }
public string Description { get; set; }
[ForeignKey("OwnerUserID")]
public string TaskOwnerId { get; set; }
[ForeignKey("ExecutorUserID")]
public string TaskExecutorId { get; set; }
public virtual ApplicationUser OwnerUserID { get; set; }
public virtual ApplicationUser ExecutorUserID { get; set; }
}
public class ApplicationUser : IdentityUser
{
public ICollection<UserTask> OwnedUserTasks { get; set; }
public ICollection<UserTask> ExecutedUserTasks { get; set; }
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
{
}
public DbSet<UserTask> UserTask { get; set; }
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<ApplicationUser>()
.HasMany(x => x.OwnedUserTasks)
.WithOne(x => x.OwnerUserID);
builder.Entity<ApplicationUser>()
.HasMany(x => x.ExecutedUserTasks)
.WithOne(x => x.ExecutorUserID);
}
}
Startup.cs
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
// Add application services.
services.AddTransient<IEmailSender, EmailSender>();
services.AddMvc();
}
}
用户任务控制器
public class UserTasksController : Controller
{
private readonly ApplicationDbContext _context;
private readonly UserManager<ApplicationUser> _userManager;
public UserTasksController(ApplicationDbContext context, UserManager<ApplicationUser> userManager)
{
_context = context;
_userManager = userManager;
}
public IActionResult Create()
{
ViewData["TaskOwnerId"] = new SelectList(_userManager.Users.ToList(), "Id", "Name");
ViewData["TaskExecutorId"] = new SelectList(_userManager.Users.ToList(), "Id", "Name");
return View();
}
}
还有风景
@model UserTaskTest.Models.UserTask
@{
ViewData["Title"] = "Create";
}
<h2>Create</h2>
<h4>UserTask</h4>
<hr />
<div class="row">
<div class="col-md-4">
<form asp-action="Create">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="Description" class="control-label"></label>
<input asp-for="Description" class="form-control" />
<span asp-validation-for="Description" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="TaskOwnerId" class="control-label"></label>
<select asp-for="TaskOwnerId" class="form-control" asp-items="ViewBag.TaskOwnerId"></select>
</div>
<div class="form-group">
<!-- <label asp-for="TaskExecutorId" class="control-label"></label>
<select asp-for="TaskExecutorId" class="form-control" asp-items="ViewBag.TaskExecutorId"></select> -->
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</form>
</div>
</div>
<div>
<a asp-action="Index">Back to List</a>
</div>
@section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
【问题讨论】:
-
您忘记在 Startup 中显示您实际注册了
ApplicationDbContext。您还忘记了在控制器中显示您从哪里获得context。也忘了显示你实际上在哪里得到那个异常 -
我添加了代码,创建任务时出现错误localhost:44312/usertasks/Create提前感谢您的帮助
-
我已编辑您的问题,以便仅显示最相关的详细信息。打电话给
_usermanager.Users.ToList()会给你任何东西吗?我猜桌子是空的。你没有说这是否发生在GET Create或POST Create -
GET Create 出现问题,但列表不为空
-
- Microsoft.EntityFrameworkCore.ChangeTracking.LocalView
+ 非公共成员 - 结果视图 展开结果视图将枚举 IEnumerable + [0] {lukas@wp.pl} UserTaskTest.Models.ApplicationUser + [1] {li@wp.pl} UserTaskTest.Models.ApplicationUser
标签: c# asp.net-core entity-framework-core asp.net-core-identity