从寄存器控制器转移价值

Transfer of value from register controller

我在将值从方法 "OnPostAsync" 转移到 Register.cshtml 时遇到问题。 ViewBag 不起作用。 如何解决这个问题。

public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
    returnUrl = returnUrl ?? Url.Content("~/");
    if (ModelState.IsValid)
    {
        var db = new ApplicationDbContext(_optionsBuilder.Options);
        var email = db.Users.Where(s => s.Email == Input.Email);
        if (email.Count() != 0)
        {
            ViewBag.pom = 100; // this doesn't work
            ViewData["duplicateEmail"] = "Email is already taken";
            return Page();
        }

...
@{
    ViewData["Title"] = "Register";
}

<h2>@ViewData["Title"]</h2>

<div class="row">
    <div class="col-md-4">
        <form asp-route-returnUrl="@Model.ReturnUrl" method="post">
            <h4>Create a new account.</h4>
            <h4>@ViewData["duplicateEmail"] error: @ViewBag.pom</h4>
            <hr />
...

根据 docs:

ViewBag isn't available in Razor Pages.

有关 为什么 不是开箱即用的更多信息,请参阅此 GitHub issue,其中包括 Damien Edwards 本人的一些评论:

We purposefully didn't add ViewBag because I wanted to discourage its use.

...

ViewBag uses dynamic which in our testing introduces a measurable performance impact on the processing of pages or views that use it. As such, I'd rather it not be available by default.

解决方案是要么使用明确的 属性(就像您对 ReturnUrl 所做的那样),要么只使用 ViewData(就像您对 duplicateEmail).

尝试用 viewData 替换 viewBag:

ViewData["pom"] = 100; 
ViewData["duplicateEmail"] = "Email is already taken";
return Page();

<div class="row">
    <div class="col-md-4">
        <form asp-route-returnUrl="@Model.ReturnUrl" method="post">
            <h4>Create a new account.</h4>
            <h4>@ViewData["duplicateEmail"] error: @ViewData["pom"]</h4>
            <hr />

ViewBag 被故意遗漏在 ra​​zor 页面中。