当HomeController在Index ActionResults中启动时,我设置一个值为1
的会话Session["login_fail"] = 1;
当用户尝试登录sessio变量时,如果失败则更改为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>
请注意,当我提交表单时,另一个操作是谁回复帖子的值,他们检查用户和密码是否正常,如果它没有(我已检查它确实返回0)它将显示错误消息,将返回到与LoginUser(返回0或1)相同的控制器中的索引actionresults
答案 0 :(得分:0)
我发现了错误。问题是,当我点击提交后,帖子值转到另一个动作列表,然后如果登录失败,会话的值为0,并且他们再次重新定向到索引动作结果,并且由于某种原因会话的值丢失。 与使用ViewBag一样,您无法在另一个视图中看到它的值。我不知道为什么会发生这种情况,因为会话应该在整个项目中可见。但我认为那是问题。
答案 1 :(得分:0)
似乎在您的LoginUser()方法之后,Index()再次起作用并再次设置Session["login_fail"] = 1;
。
您知道每次加载页面时[Get] Index()都有效。我建议你使用TempData通过控制器方法传递数据。
TempData [“login_fail”] = 1;
因此,您可以检查Index()中的TempData是1还是0,并根据TempData设置会话。