我有以下表单试图让用户登录:
<form method="post" asp-controller="Auth" asp-action="SignIn">
<div class="form-group row">
<div class="col">
<input class="form-control" type="email" placeholder="Email" id="email-input" name="email">
</div>
</div>
<div class="form-group row">
<div class="col">
<input class="form-control" type="password" placeholder="Password" id="password-input" name="password">
</div>
</div>
<div class="form-group row">
<div class="col">
<button class="btn btn-success" type="submit" name="button" style="width: 100%;">Login</button>
</div>
</div>
</form>
正如您所看到的,表单使用名为Auth的Controller和名为SignIn的Controller上的操作。以下是Controller的示例:
public class AuthController : Controller
{
public IActionResult Index()
{
return View(new SignInViewModel());
}
[HttpPost]
public async Task<IActionResult> SignIn(SignInViewModel model)
{
if (ModelState.IsValid)
{
if (await _userService.ValidateCredentials(model.Email, model.Password, out var user))
{
await SignInUser(user.Email);
return RedirectToAction("Index", "Home");
}
}
return View(model);
}
}
我在第if (ModelState.IsValid)
行设置了一个断点,它永远不会被击中。当我单击登录按钮时,页面只会刷新。我真的不明白为什么当Controller和Action看起来没问题时,为什么这个断点没有被击中。
编辑:SignInViewModel
:
public class SignInViewModel
{
[Required(ErrorMessage = "Please Enter an Email Address")]
public string Email { get; set; }
[Required(ErrorMessage = "Please Enter a Password")]
public string Password { get; set; }
}
来自Chrome的小部件:
答案 0 :(得分:1)
所以我做了一个新项目试图复制这个问题,它对我来说非常合适。 我假设您还没有使用区域吗?如果您正在使用区域,请将此属性添加到控制器类:
[Route("AreaNameHere")]
虽然如果你能够进入索引页面,那么这不是问题。
您的断点有效吗?符号是否被加载?由于ModelState无效或细节无效,因此它可能会刷新,因此它返回相同的视图。您可以使用fiddler来查看它是否真的在提出请求。
编辑: 你有这条线&#34; @addTagHelper *,Microsoft.AspNetCore.Mvc.TagHelpers&#34;在_ViewImports.cshtml文件中?