C# MVC手动重置字符串在刷新时仍然通过所需的验证 公共类登录模型 { [必需] 公共字符串用户名{get;set;} 私有字符串密码; [必需] 公共字符串密码 { 获取{返回密码;} 设置{password=Hash(value);} } 公共字符串ReturnUrl{get;set;} 公共登录模型RemovePassword() { 密码=null; 归还这个; } } 公共操作结果登录(){return View();} [HttpPost] 公共操作结果登录(Models.LoginModel model) { if(ModelState.IsValid) { if(CurrentUser.Login(model.Username,model.Password) { 返回重定向到操作(“索引”、“主页”);} } } 返回视图(model.RemovePassword()); } @使用(Html.BeginForm()) { 用户登录 用户名 @TextBoxFor(o=>o.Username,新的{@class=“form control”,@id=“textboxUsername”,@placeholder=“Username”,autocomplete=“off”}) 密码 @Html.PasswordFor(o=>o.Password,新的{@class=“form control”,@id=“textboxPassword”,@placeholder=“Password”,autocomplete=“off”}) 忘记密码了? 登录 }

C# MVC手动重置字符串在刷新时仍然通过所需的验证 公共类登录模型 { [必需] 公共字符串用户名{get;set;} 私有字符串密码; [必需] 公共字符串密码 { 获取{返回密码;} 设置{password=Hash(value);} } 公共字符串ReturnUrl{get;set;} 公共登录模型RemovePassword() { 密码=null; 归还这个; } } 公共操作结果登录(){return View();} [HttpPost] 公共操作结果登录(Models.LoginModel model) { if(ModelState.IsValid) { if(CurrentUser.Login(model.Username,model.Password) { 返回重定向到操作(“索引”、“主页”);} } } 返回视图(model.RemovePassword()); } @使用(Html.BeginForm()) { 用户登录 用户名 @TextBoxFor(o=>o.Username,新的{@class=“form control”,@id=“textboxUsername”,@placeholder=“Username”,autocomplete=“off”}) 密码 @Html.PasswordFor(o=>o.Password,新的{@class=“form control”,@id=“textboxPassword”,@placeholder=“Password”,autocomplete=“off”}) 忘记密码了? 登录 },c#,asp.net-mvc,C#,Asp.net Mvc,因此,本质上,当遇到登录失败时,它会像大多数站点一样删除密码框。我还为失败设置了IP锁定 登录失败后,如果我刷新页面,它会发回,空密码框仍会通过所需的验证-即使它是空的,并为用户添加另一个登录失败。是否有更好的方法从本质上重置密码框,从而将其设置为无效 刷新页面是否会重复上一篇文章?如果是这样,可能无法避免这种情况发生。我误解了原始问题,因此删除了先前的答案细节,因为它用不必要的信息模糊了主题 最初的问题实际上是“在将数据发布到服务器导致错误后,当您F5刷新浏览器时,浏览器的行为是什么?” 浏览

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

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


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

我误解了原始问题,因此删除了先前的答案细节,因为它用不必要的信息模糊了主题

最初的问题实际上是“在将数据发布到服务器导致错误后,当您F5刷新浏览器时,浏览器的行为是什么?”


浏览器通常会(在IE和Chrome中测试)提示您是否希望再次发布以前发布的数据,这就是他们表单通过验证的原因。点击“刷新”不会发布可见的表单数据,而是发布上一篇文章中发布的表单。

您可以添加控制器代码和登录视图吗?啊,很好。我想我是在尝试重新设计轮子e、 我仍在试图弄清楚,如果你刷新页面,为什么它不会重新调用验证。登录失败后,它会返回模型,并显示在它锁定你之前,你还有很多次登录尝试。每次你这样做时,它似乎都在发回,以及如何通过所需的验证。在我DDE使用属性简化。如何“刷新”页面。是否再次使用空密码字段单击登录按钮,还是在浏览器中单击刷新?F5刷新。是否使用以前的表单发回?当您在“发布”的表单上单击F5时它告诉你它将重新发送你以前发送过的信息。IE和Chrome有类似的行为,它们会提示你重新发布表单数据。调试我看到发布了相同的值,所以是的,它发布了以前的表单。是的,这就是我开始想的。我想如果我的用户不断刷新这些数据,他们会很高兴佩奇,谢谢你的帮助,卢卡斯。
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>                        
    }