无法在控制器中设置的视图中访问 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?
我无法访问视图中 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?