当用户登录时,通常要做的就是不给密码。我在MVC 5中尝试这个,并且无法实现。我尝试了model.PASSWORD = ""
以及ModelState.Clear()
,但数据仍在显示。
控制器:
public async Task<ActionResult> Login(Login model) {
if(ModelState.IsValid) {
User temp = await db.Users.Where(u => u.USERNAME == model.USERNAME).FirstOrDefaultAsync();
if(temp != null) {
try {
if(Password.VerifyPass(model.PASSWORD, temp.PASSWORD)) {
LoginUser(temp);
return RedirectToAction("Index", "EMR");
}
} catch { }
}
}
ModelState.Clear();
model.PASSWORD = "";
ModelState.AddModelError("", "Username/password is unknown, or model was invalid!");
return View();
}
型号:
public class Login {
[Display(Name = "Username")]
public string USERNAME { get; set; }
[Display(Name = "Password")]
public string PASSWORD { get; set; }
}
}
查看:
@using(Html.BeginForm()) {
@Html.AntiForgeryToken()
<div class="form-horizontal">
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.USERNAME, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.USERNAME, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.USERNAME, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.PASSWORD, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.PASSWORD, new { htmlAttributes = new { @class = "form-control", @type = "password" } })
@Html.ValidationMessageFor(model => model.PASSWORD, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Login" class="btn btn-success" />
</div>
</div>
</div>
}
在VisualStudio调试模式下查看ModelState变量和模型变量时,它们同时将数据显示为""
。可能导致这种情况的原因是什么?
答案 0 :(得分:1)
清除后,您不会将模型传回视图。
return View(model);
仍然无效,请尝试以下操作。
var newModel = new Login { Password = "" };
ModelState.Clear();
return View(newModel);
答案 1 :(得分:1)
我认为这是由于浏览器兑现,使用
注释登录操作[OutputCacheAttribute(VaryByParam = "*", Duration = 0, NoStore = true)]
除了
return View(model);
答案 2 :(得分:1)
正如我所评论的,一种可能的解决方案是简单地使用@ Html.PasswordFor()。这将为密码输入呈现语义正确的输入,隐式提示浏览器不自动填充。所以,而不是@Html.EditorFor,试试这个:
@Html.PasswordFor(model => model.PASSWORD, new { htmlAttributes = new { @class = "form-control" })
答案 3 :(得分:1)
首先使用Password
数据类型装饰您的密码字段。
public class Login
{
[Display(Name = "Username")]
public string USERNAME { get; set; }
[Display(Name = "Password")]
[DataType(DataType.Password)]
public string PASSWORD { get; set; }
}
在视图中,使用PasswordFor
辅助方法。
@Html.PasswordFor(x=>x.PASSWORD)
使用此功能,您无需将密码字段显式设置为空字符串。 MVC将为您做到这一点。
答案 4 :(得分:0)
@CalebHuggins看起来它是浏览器记住输入字段值并填充它们。您可以尝试将文本框的自动填充属性设置为&#34; off&#34;为了避免这种情况。
您的模型绑定文本框可能如下所示。
@Html.TextBoxFor(x => x.Something, new { autocomplete="off" } )
Thnaks和问候, Chetan Ranpariya