无法在控制器中设置的视图中访问 viewbag 的值

Can't access value of view bag in view set in controller

我无法访问视图中 Viewbag.IsTeacher=i; 的值。我做错了什么或者还有更多事情要做才能访问 view bag 的价值? 我想根据 Viewbag.IsTeacher=i; 的值添加一个 'if' 条件。花了几个小时解决这个问题,但没有得到任何合适的解决方案。

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Register(RegisterModel model)
{
    if (ModelState.IsValid)
    {
        // Attempt to register the user
        try
        {
            //UserProfile u = new UserProfile();
            WebSecurity.CreateUserAndAccount(model.UserName, model.Password);
            WebSecurity.Login(model.UserName, model.Password);
            //var vRole = Request["selectRole"];
            //u =db.UserProfiles.Find(WebSecurity.CurrentUserId);
            var vRole = Request["selectRole"];
            int i = 0;
            if (vRole.Equals("teacher"))
            {
                i = 1;
                //ViewBag.rolee = "teacher";
                //u.IsTeacher = 1;
            }
            else
            {
                i = 0;
            }
            ViewBag.IsTeacher = i; 
            //ViewBag.rolee = "student";

            return RedirectToAction("Index", "Home");
        }
        catch (MembershipCreateUserException e)
        {
            ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
        }
    }

    // If we got this far, something failed, redisplay form

    return View(model);
}

查看:

@if (Request.IsAuthenticated && ViewBag.IsTeacher == 1)
{
    <li>@Html.ActionLink("Quiz Management", "Index", "Quiz")</li>
    <li>@Html.ActionLink("Browse Quizzes", "Index", "TakeQuiz")</li>
    <li>@Html.ActionLink("Assignment Scheduling", "Index", "Assignment</li>
}

ASP.NET MVC TempData 字典用于在控制器操作之间共享数据。 TempData 的值一直存在,直到它被读取或直到当前用户的会话超时。在 TempData 中保留数据在重定向等场景中很有用,当需要的值超出单个请求时。

在您的注册操作中,您将拥有:

TempData["Role"] = Request["selectRole"];

在您的 Index 操作中,您将拥有:

ViewBag.IsTeacher = (TempData["Role"] != null && TempData["Role"] == "teacher");

那么在你看来你会:

... ViewBag.IsTeacher == true ...

重定向时,ViewBag 数据不复存在。使用 ViewBag 时,您应该 return 仅一个视图。使用 TempData 进行重定向。

看到这个类似的问题 Why isn't viewbag value passing back to the view?