我在 MVC 5 中有一个项目,用户必须在其中登录,并使用“会话”变量将他的名字显示在 _Layout.cshtml 的标题中,这通过 a @Viewbag.session
,但由于某种原因它不是在职的。这是代码:
在模型中:
[Serializable]
public class ClsLogin
{
public int idUsuario { get; set; }
[Required]
public string NombreUsuario { get; set; }
[Required]
public string Contrasena { get; set; }
public string SessionValue {get; set; }
}
在控制器中:
[HttpPost]
public ActionResult Login(ClsLogin User)
{
string message = "";
if (ModelState.IsValid)
{
message = "Success";
Session["SessionUser"] = User.NombreUsuario;
var sessionuser = new ClsLogin();
if (Session["SessionUser"] != null)
{
sessionuser.SessionValue = Session["SessionUser"].ToString();
}
else
{
sessionuser.SessionValue = "La sesión ha expirado";
}
ViewBag.session = sessionuser;
}
else
{
message = "Uno de los campos es incorrecto";
}
if (Request.IsAjaxRequest())
{
return Json(message, JsonRequestBehavior.AllowGet);
}
else
{
return RedirectToAction("Index", "Home");
}
}
最后是 Viewbag 不起作用的主视图 _Layout:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width">
<title>ASP.NET Proyect</title>
@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/modernizr")
<link href="~/Content/bootstrap.min.css" rel="stylesheet" />
<link href="~/Content/bootstrap-theme.min.css" rel="stylesheet" />
<script src="~/Scripts/bootstrap.min.js"></script>
<script src="~/Scripts/jquery-2.2.1.min.js"></script>
<link href="~/Content/css/_Layout.css" rel="stylesheet" />
<link href="~/Content/css/Styles.css" rel="stylesheet" />
</head>
<body>
<!--Encabezado-->
<header>
<h2 class="padding">Bienvenido</h2>
@ViewBag.session
</header>
<!--Menu-->
<div class="menu-content">
@Html.Partial("_Menu")
</div>
<!--Contenido-->
<div class="body-content">
@RenderBody()
</div>
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bootstrap")
@RenderSection("scripts", required: false)
</body>
</html>
我也试过这样@Html.TextBox("mensaje", (string)ViewBag.session)
,但没有用。知道我做错了什么吗?
问题是数据
ViewBag
仅在同一请求期间可用。我看到发生的是您在操作中填写值,Login
然后重定向到操作Index
,在第二个请求中数据不再可用。您可以做的是继续
Session
在您的视图中使用 if 是一个在不同调用之间保存数据的类User
如果您只需要名称,甚至可以使用对象的属性