我有一个asp.net MVC项目,当某人访问主页时,它会根据他们工作的部门显示许多按钮。 然后,他们可以选择要登录的部门。
然后,以下控制器使用适当的contractId设置会话cookie。
但是,如果他们在其他部门下再次登录,则cookie不会被新的contractId覆盖
public ActionResult SetContractId(int contractId)
{
Session["LoggedContractId"] = contractId;
return RedirectToAction("IndexLoggedIn");
}
我使用以下方法从视图中显示的按钮中调用上述内容:
@foreach (var item in Model)
{
<div class="col-lg-offset-4 col-md-8" style="margin-bottom: 25px">
@Html.ActionLink("Login under this Contract", "SetContractId", new { contractId = item.ContractId }, new { @Class = "btn btn-primary" }) <b>@Html.DisplayFor(modelItem => item.DepartmentName)</b>
</div>
}
我使用此cookie值为他们设置系统。我这样使用会话变量:
public ActionResult StartDebrief()
{
if (Session["LoggedContractId"] == null)
{
return RedirectToAction("IndexLogin", "Home", null);
}
else
{
var user = User.Identity.Name;
string userName = user.Substring(7);
var creator = Peopledb.People.FirstOrDefault(x => x.Username == userName);
var creatorContractId = (int)Session["LoggedContractId"];
//Use creatorContractId in the viewmodel and other areas
return View(viewModel);
}
}
有什么想法吗?
答案 0 :(得分:0)
在我看来,您用于更新会话信息的代码看起来不错。这意味着会话数据应正确更新。但是,可能没有正确调用此函数。尝试调试功能SetContractId()。重新登录后,您在哪里调用此函数?