从寄存器控制器转移值

时间:2019-04-10 15:45:55

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

我将方法“ 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 />
...

2 个答案:

答案 0 :(得分:1)

根据docs

  

ViewBag在Razor Pages中不可用。

有关现成的为什么的更多信息,请参见以下GitHub issue,其中包括Damien Edwards本人的一些评论:

  

我们故意不添加ViewBag,因为我想阻止它的使用。

     

...

     

ViewBag使用动态功能,该动态功能在我们的测试中对使用它的页面或视图的处理产生了可衡量的性能影响。因此,我希望它默认情况下不可用。

解决方案是使用显式属性(就像对ReturnUrl所做的那样)或仅使用ViewData(就像对duplicateEmail所做的那样)。

答案 1 :(得分:0)

尝试将viewBag替换为viewData:

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留在了剃须刀页面中。

相关问题