会话mvc 4出错

时间:2013-03-26 14:58:17

标签: c# asp.net-mvc-4

当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

2 个答案:

答案 0 :(得分:0)

我发现了错误。问题是,当我点击提交后,帖子值转到另一个动作列表,然后如果登录失败,会话的值为0,并且他们再次重新定向到索引动作结果,并且由于某种原因会话的值丢失。 与使用ViewBag一样,您无法在另一个视图中看到它的值。我不知道为什么会发生这种情况,因为会话应该在整个项目中可见。但我认为那是问题。

答案 1 :(得分:0)

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

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

TempData [“login_fail”] = 1;

因此,您可以检查Index()中的TempData是1还是0,并根据TempData设置会话。