gpt4 book ai didi

c# - .NET 核心 : always showing validation errors

转载 作者:行者123 更新时间:2023-11-30 21:43:32 24 4
gpt4 key购买 nike

我有一个简单的登录表单。
除了一件事,一切都很好。当您进入页面时,它始终显示验证(例如,字段是必需的),即使没有数据被发布到 Controller 。
有什么方法可以仅在实际发出 POST 请求时显示验证?

查看:

@model LoginViewModel
<form asp-controller="User" asp-action="Login" method="post">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>

<label asp-for="Email"></label>
<input asp-for="Email" />
<span asp-validation-for="Email"></span>

<label asp-for="Password"></label>
<input asp-for="Password" />
<span asp-validation-for="Password"></span>

<button type="submit">Login</button>
</form>

View 模型:

public class LoginViewModel
{
[Required]
[DataType(DataType.EmailAddress)]
public string Email { get; set; }
[Required]
[DataType(DataType.Password)]
public string Password { get; set; }
}

行动:

[HttpGet]
[HttpPost]
[AllowAnonymous]
public async Task<IActionResult> Login(LoginViewModel model)
{
ClaimsPrincipal userClaims = _userRepository.TryLogin(model);

if (userClaims != null)
{
...
}
return View(model);
}

最佳答案

正如 Paul 在评论中提到的那样,您应该删除 [Get] 属性,这将阻止对操作的 Get 请求,而是创建一个新的 Controller 操作,负责处理不执行的 get 请求不会导致操作的模型 LoginViewModel 为 null。

例如:

[AllowAnonymous]
public async Task<IActionResult> Login()
{
return View(new LoginViewModel());
}

[HttpPost]
[AllowAnonymous]
public async Task<IActionResult> Login(LoginViewModel model)
{
ClaimsPrincipal userClaims = _userRepository.TryLogin(model);

if (userClaims != null)
{
...
}
return View(model);
}

现在您的验证只会因无效的帖子模型而触发。

关于c# - .NET 核心 : always showing validation errors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41644377/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com