如何在帖子后添加消息?

时间:2019-01-24 22:17:10

标签: c# asp.net-core razor-pages

我有一个功能为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">&copy; 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回答之后使用。

2 个答案:

答案 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。