我有一个功能为OnPostAsync()
的身份验证表单,我想在身份验证失败时添加一条错误消息,但是我的页面无法收到任何消息。
从API得到答案后,我会使用并设置一个变量,但是前面的代码不会更新。
Login.cshtml.cs
public string errorMessage { get; set; }
public async void OnPostAsync()
{
if (!ModelState.IsValid)
{
return;
}
var resp = await _loginService.Connection(user);
if (resp == null)
{
Console.WriteLine("resp null");
errorMessage = "Incorrect username or password";
return;
}
_cookieService.Set("token", resp);
}
Login.cshtml
<div class="classbody">
<form class="form-signin" method="post">
<h1 class="h3 mb-3 font-weight-normal">Connexion</h1>
<label for="username" class="sr-only">Username</label>
<input type="text" id="username" class="form-control" placeholder="Username" asp-for="user.Username" required autofocus>
<label for="inputPassword" class="sr-only">Password</label>
<input type="password" id="inputPassword" class="form-control" placeholder="Password" asp-for="user.Password" required>
<button class="btn btn-lg btn-primary btn-block" type="submit">Connexion</button>
<p class="mt-5 mb-3 text-muted">© 2017-2018</p>
@if (@Model.errorMessage != null)
{
<div class="alert alert-danger" role="alert">
@Model.errorMessage
</div>
}
</form>
</div>
errorMessage = "Incorrect username or password";
在等待之后不起作用,如果我将行放在函数(OnPostAsync
)的开始处,它可以正常工作,但是我需要在API回答之后使用。
答案 0 :(得分:1)
WhoKnows解决了它,这是我现在的代码,它的工作原理就像一个魅力。
public async Task<IActionResult> OnPostAsync()
{
if (!ModelState.IsValid)
{
return Page();
}
var resp = await _loginService.Connection(user);
if (resp == null)
{
Console.WriteLine("resp null");
errorMessage = "Error";
return Page();
}
return RedirectToPage("/Book");
}
答案 1 :(得分:0)
您应该使用Task而不是void。