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”}) 忘记密码了? 登录 }
因此,本质上,当遇到登录失败时,它会像大多数站点一样删除密码框。我还为失败设置了IP锁定 登录失败后,如果我刷新页面,它会发回,空密码框仍会通过所需的验证-即使它是空的,并为用户添加另一个登录失败。是否有更好的方法从本质上重置密码框,从而将其设置为无效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刷新浏览器时,浏览器的行为是什么?” 浏览
刷新页面是否会重复上一篇文章?如果是这样,可能无法避免这种情况发生。我误解了原始问题,因此删除了先前的答案细节,因为它用不必要的信息模糊了主题 最初的问题实际上是“在将数据发布到服务器导致错误后,当您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>
}