0

当 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 位于同一控制器中的 Index actionresults(返回 0 或 1 的控制器)

4

2 回答 2

0

我发现了错误。问题是,当我单击提交时,帖子值会转到另一个 actionresuts,然后如果登录失败,会话的值会变为 0,并且他们再次重定向到 Index actionresults,并且由于某种原因,会话的值会丢失。就像使用 ViewBag 一样,您无法在另一个视图中看到它的值。我不知道为什么会发生这种情况,因为会话应该在整个项目中可见。但我客人说这是问题所在。

于 2013-03-26T16:10:29.440 回答
0

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

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

TempData["login_fail"] = 1;

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

于 2015-06-28T20:52:13.067 回答