【发布时间】:2019-04-15 08:06:01
【问题描述】:
我有一个非常简单的网络应用程序,我尝试让人们注册用户。因此,我尝试将用户注册数据保存到 Entity Framework,但没有成功。
由于某种原因,提交表单时未触发 IActionResult 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();
}
}
Index.cshtml
@model CS_ConfigSettings.Models.Register
<form asp-controller="Account" asp-action="RegisterUser" method="post">
<input asp-for="Email" type="text" name="Email" id="Email" />
<input asp-for="Password" type="password" name="Password" id="Password" />
<button type="submit">Submit</button>
</form>
控制器
public class AccountController : Controller
{
private readonly UserManager<IdentityUser> _userManager;
public AccountController(UserManager<IdentityUser> userManager)
{
_userManager = userManager;
}
public IActionResult Index()
{
return View();
}
[HttpPost]
public async Task<IActionResult> RegisterUser(Register register)
{
var user = new IdentityUser
{
Email = register.Email
};
var result = await _userManager.CreateAsync(user, register.Password);
return View();
}
}
Register.cs
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; }
}
DataContext.cs
public class DataContext : DbContext
{
public DbSet<Register> register { get; set; }
public DataContext(DbContextOptions<DataContext> options) : base(options)
{
Database.EnsureCreated();
}
}
当我提交表单时,Controller-action RegisterUser 中设置的断点不会被触发,数据库表 register 也不会更新。
提前谢谢你。
【问题讨论】:
-
您可以使用 Chrome 开发者工具或 Fiddler 来确认要发布的内容正在发送到您的控制器吗?
-
@KevinRaffay 当我点击按钮提交时,它会回复状态码 200,并且请求方法是 POST。它似乎没有触发我在 Controller 类中的方法。
-
@KevinRaffay 我相信我找到了问题所在。我在视图中的表单有两个输入字段,电子邮件和密码,我尝试提交它们。但是,我的 ActionResult 与接收这些参数不匹配,因此它从未被触发。感谢您的帮助!
-
很好,不知道为什么它没有将字段绑定到注册模型。
-
@KevinRaffay 如果您好奇,请继续跟进;似乎我的字段没有绑定到模型的原因是因为我没有在我的视图中添加标签助手。在我看来,这条线似乎已经完成了这项工作:
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
标签: asp.net asp.net-mvc asp.net-core-mvc entity-framework-core identity