我无法在视图中访问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>
}
答案 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进行重定向。