未触发控制器操作-简单项目-ASP.NET MVC CORE 2.0
我有一个非常简单的web应用程序,我尝试让人们注册一个用户。因此,我尝试将用户注册数据保存到实体框架,但没有成功 出于某种原因,在提交表单时不会触发IActionResult未触发控制器操作-简单项目-ASP.NET MVC CORE 2.0,asp.net,asp.net-mvc,asp.net-core-mvc,entity-framework-core,identity,Asp.net,Asp.net Mvc,Asp.net Core Mvc,Entity Framework Core,Identity,我有一个非常简单的web应用程序,我尝试让人们注册一个用户。因此,我尝试将用户注册数据保存到实体框架,但没有成功 出于某种原因,在提交表单时不会触发IActionResultRegisterUser(我尝试设置断点,但没有发生任何事情)。有人知道为什么吗 Startup.cs public class Startup { public void ConfigureServices(IServiceCollection services) { var connect
RegisterUser
(我尝试设置断点,但没有发生任何事情)。有人知道为什么吗
Startup.cs
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
var connection = @"Server=(localdb)\mssqllocaldb;Database=APIExercise2;Trusted_Connection=True;ConnectRetryCount=0";
services.AddDbContext<DataContext>(options => options.UseSqlServer(connection));
services.AddIdentity<IdentityUser, IdentityRole>()
.AddEntityFrameworkStores<DataContext>();
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseMvc(routes =>
{
routes.MapRoute("Default", "{controller=Account}/{action=Index}");
});
app.UseFileServer();
}
}
public class Register
{
public int Id { get; set; }
[Required]
[EmailAddress]
[Display(Name = "Email")]
public string Email { get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
}
public class DataContext : DbContext
{
public DbSet<Register> register { get; set; }
public DataContext(DbContextOptions<DataContext> options) : base(options)
{
Database.EnsureCreated();
}
}
DataContext.cs
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
var connection = @"Server=(localdb)\mssqllocaldb;Database=APIExercise2;Trusted_Connection=True;ConnectRetryCount=0";
services.AddDbContext<DataContext>(options => options.UseSqlServer(connection));
services.AddIdentity<IdentityUser, IdentityRole>()
.AddEntityFrameworkStores<DataContext>();
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseMvc(routes =>
{
routes.MapRoute("Default", "{controller=Account}/{action=Index}");
});
app.UseFileServer();
}
}
public class Register
{
public int Id { get; set; }
[Required]
[EmailAddress]
[Display(Name = "Email")]
public string Email { get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
}
public class DataContext : DbContext
{
public DbSet<Register> register { get; set; }
public DataContext(DbContextOptions<DataContext> options) : base(options)
{
Database.EnsureCreated();
}
}
公共类DataContext:DbContext
{
公共数据库集寄存器{get;set;}
公共数据上下文(DbContextOptions):基本(选项)
{
数据库。请重新创建();
}
}
当我提交表单时,控制器操作RegisterUser
中设置的断点不会被触发,数据库表register
也不会更新
提前谢谢。那么您知道Identity为您创建表了吗?他们通常被命名为AspNetUsers、AspNetRoles、aspnetroleuser等。。。因此,创建
寄存器将是Identity永远不会使用的表
如果前面列出的表不在创建的数据库中,则需要创建迁移,通常是创建所有标识表的初始
迁移。使用PMC命令或带有dotnet
的命令行。我建议您重新创建项目,并选择个人用户帐户为您构建身份特征
事实上,你还没有能够击中一个断点的方法。。。对于UseFileServer正在干扰MVC的用户。。。始终将UseMVC()
作为最后一项。秩序确实重要
一旦该方法被命中,它就会出错,因为UserManager将因表不存在而死亡,因为这将是新创建的用户在AspNetUsers
命令行:dotnet ef迁移添加
PMC:添加迁移
然后运行updatedatabase
,这将提交您刚才所做的所有更改
我的一个项目中的代码片段
你能用Chrome Developer Tools或Fiddler确认发送给你的控制器吗?@KevinRaffay当我点击按钮提交时,它会以状态代码200回复,请求方法为post。它似乎没有触发我在控制器类中的方法。@KevinRaffay我相信我找到了问题所在。我在视图中的表单有两个输入字段,Email和Password,我尝试提交它们。但是,我的ActionResult与这些参数不匹配,因此它从未被触发。谢谢你的帮助!很好的理解,不知道为什么它没有将字段绑定到寄存器模型。@KevinRaffay只是一个跟进,如果你好奇的话;我的字段没有绑定到模型的原因似乎是因为我没有向视图中添加标记帮助器。我视图顶部的这一行似乎完成了任务:@addTagHelper*,Microsoft.AspNetCore.Mvc.TagHelpers
嘿,你的评论极大地帮助我解决了我遇到的问题。我不知道Identity
不能用于自定义表,而只能用于自定义表。由于缺少默认标识表,这导致我在DataContext.cs类中发现错误:该类继承自DbContext
,但它应该是IdentityDbContext
。最后,出于某种原因,在控制器方法RegisterUser
中,用户
必须在电子邮件
(不知道为什么?)!如果将来有人遇到这个问题,请随时写信给我