会话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的那个)在同一个控制器

会话mvc 4错误

我发现了错误。问题是,当我点击提交后的值转到另一个动作结果,然后会话的值得到0,如果登录失败,他们再次使重定向动作索引动作结果和会话的值出于某种原因,丢失。就像你使用ViewBag一样,你不能在另一个视图中看到它的值。我不知道为什么会发生这种情况,因为会话应该在整个项目中可见。

似乎在您的LoginUser()方法之后,Index()再次工作并再次设置Session["login_fail"] = 1;

你知道你的[Get] Index()在每次加载页面时都有效。我建议你使用TempData来通过控制器方法传递数据。

TempData["login_fail"] = 1;

所以你可以检查TempData是1还是0在你的Index()和设置会话根据TempData