.NET Core:始终显示验证错误

时间:2017-01-13 22:23:06

标签: c# asp.net-core-mvc

我有简单的登录表单。
除了一件事,一切都很好。当您进入页面时,它总是显示验证(例如,字段是必需的),即使没有数据被发送到控制器。
有没有办法只在实际发出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>

视图模型

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);
    }

1 个答案:

答案 0 :(得分:3)

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

例如:

[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);
}

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