MVC手动重置字符串仍然会在刷新时通过所需的验证

时间:2013-10-30 17:27:21

标签: c# asp.net-mvc

public class LoginModel
{        
    [Required]
    public string Username { get; set; }        
    private string password;
    [Required]
    public string Password
    {
        get { return password; }
        set { password = Hash(value); }
    }
    public string ReturnUrl { get; set; }

    public LoginModel RemovePassword()
    {
        Password = null;       
        return this;
    }
}

public ActionResult Login() { return View(); }

[HttpPost]
public ActionResult Login(Models.LoginModel model)
{
    if (ModelState.IsValid)
    {
        if (CurrentUser.Login(model.Username, model.Password)
        {
            return RedirectToAction("Index", "Home"); }
        }
    }
    return View(model.RemovePassword());
}

@using (Html.BeginForm())
    {                        
        <div class="modal-header">                  
            <h3 class="modal-title">User Login</h3>
        </div>                                      
        <div class="modal-body">
            <div class="@usernameFormGroup">  
                <label for="textboxUsername" class="ie">Username</label>
                @Html.TextBoxFor(o => o.Username, new { @class = "form-control", @id = "textboxUsername", @placeholder = "Username", autocomplete = "off" })                    
            </div>
            <div class="@passwordFormGroup">  
                <label for="textboxPassword" class="ie">Password</label>                                    
                @Html.PasswordFor(o => o.Password, new { @class = "form-control", @id = "textboxPassword", @placeholder = "Password", autocomplete = "off" })                                                     
            </div>            
        </div>
        <div class="modal-footer">        
            <button id="buttonForgotPassword" type="button" class="btn btn-link">Forgot Password?</button>                
            <button id="buttonLogin" type="submit" class="btn btn-default"><span class="glyphicon glyphicon-log-in"></span>  Login</button>
        </div>                        
    }        

基本上,当遇到登录失败时,它会删除密码框,就像大多数网站一样。我还为失败设置了IP锁定。

登录失败后,如果我刷新页面,它会回发并且空密码框仍然会通过所需的验证 - 即使它是空的,并为用户添加了另一个登录失败。是否有更好的方法来重置密码框,使其设置为无效?

刷新页面是否重复上一篇文章?如果是这样,可能就没有办法避免这种情况发生。

1 个答案:

答案 0 :(得分:0)

我误解了原来的问题,因此删除了先前的答案详细信息,因为它使用不必要的信息来覆盖主题。

最初的问题是“在将数据发布到服务器后F5刷新它们时,浏览器的行为是什么导致错误。”

浏览器通常会(在IE和Chrome中测试)提示您询问是否要再次发布之前发布的数据,这就是他们形成通过验证的原因。点击刷新不会发布可见表单数据,而是发布您在之前帖子上发布的表单。

相关问题