会话mvc 4错误
本文关键字:错误 mvc 会话 | 更新日期: 2023-09-27 18:06:09
当HomeController在Index ActionResults中启动时,我设置了一个值为1的会话
Session["login_fail"] = 1;
当用户尝试登录时,如果失败,会话变量将更改为0
Session["login_fail"] = 0;
如果它失败了,这里应该发生什么
@using(Html.BeginForm()) {
<fieldset>
<legend>Tbl_Users</legend>
<table>
<tr>
<td>User Name</td>
<td><input type="text" id="username" name="userName" /></td>
<td id="ErrorMessage"></td>
</tr>
<tr>
<td>Password </td>
<td><input type="text" id="pass" name="pass" /></td>
<td id="ErrorMessage"></td>
</tr>
@{
if(Convert.ToInt32(Session["login_fail"]) == 0)
{
<p>User name or password are incorrect. Please, try again.</p> //here should apper the error message if it fails but it doesnt
}
}
</table>
<p>
<input type="submit" onclick="return validate()" value="Login" />
</p>
</fieldset>
请注意,当我提交表单时,另一个动作是谁接收post的值并检查用户和密码是否正确,如果不是(我已经检查过它是否返回0),它将显示错误消息,并将返回到Index actionresults,它与LoginUser(返回0或1的那个)在同一个控制器
我发现了错误。问题是,当我点击提交后的值转到另一个动作结果,然后会话的值得到0,如果登录失败,他们再次使重定向动作索引动作结果和会话的值出于某种原因,丢失。就像你使用ViewBag一样,你不能在另一个视图中看到它的值。我不知道为什么会发生这种情况,因为会话应该在整个项目中可见。
似乎在您的LoginUser()方法之后,Index()再次工作并再次设置Session["login_fail"] = 1;
。
你知道你的[Get] Index()在每次加载页面时都有效。我建议你使用TempData来通过控制器方法传递数据。
TempData["login_fail"] = 1;
所以你可以检查TempData是1还是0在你的Index()和设置会话根据TempData