我在MVC视图上有以下文本框:
@Html.TextBoxFor(x => x.Captcha, new { @value = "" })
我正在尝试文本框在提交错误后表单显示时始终为空...但这不起作用。我总是看到最后一个值。
这是我的控制者:
[Route("signup"), HttpGet]
public virtual ActionResult SignUp() {
UserSignUpModel model = new UserSignUpModel();
model.Captcha = String.Empty;
model.Email = "";
return View(model);
} // SignUp
[Route("signup"), HttpPost, ValidateAntiForgeryToken]
public virtual ActionResult SignUp(UserSignUpModel model) {
if (ModelState.IsValid) {
// Create account code
return View(MVC.Shared.Views._Note, new NoteModel("Account created"));
} else {
model.Captcha = String.Empty;
model.Email = "";
return View(Views.SignUp, model);
}
}
谢谢你, 米格尔
答案 0 :(得分:1)
如果提交的表单有错误,您只需清除ViewData并在返回包含错误的视图之前明确清除控制器中的属性。
[HttpPost]
public ActionResult MyController(Model myModel)
{
if (!ModelState.IsValid)
{
myModel.Captcha = String.Empty;
ViewData = null;
return View(myModel);
}
return View(myModel);
}
答案 1 :(得分:1)
我能够解决这个问题。正确的方法是使用模型状态:
ModelState [“Captcha”]。Value = new ValueProviderResult(“”,“”,Thread.CurrentThread.CurrentCulture);
这样就无需清除ViewData中的其他数据。
通过更改ModelState而不删除它,可以仍然显示与该属性相关的错误。
答案 2 :(得分:0)
在控制器的操作方法中手动设置此参数:
// ...
model.Captcha = String.Empty;
return View(model);
我建议在验证码字段中添加autocomplete = off html属性:
@Html.TextBoxFor(x => x.Captcha, new { autocomplete = "off" })