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

时间:2015-02-09 16:03:07

标签: asp.net-mvc controller viewbag

我无法在视图中访问Viewbag.IsTeacher=i;的值。我做错了什么或者有更多的事情要做访问视角袋的价值? 我想添加一个' if'条件取决于Viewbag.IsTeacher=i;的值。花费数小时,但无法得到任何适当的解决方案。

[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>
}

2 个答案:

答案 0 :(得分:1)

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

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

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

在您的索引操作中,您将拥有:

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

然后在你看来你会有:

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

答案 1 :(得分:1)

重定向时,ViewBag数据不再存在。使用ViewBag时,您应该只返回一个View。使用TempData进行重定向。

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