将Html.TextBox值设置为null

时间:2013-12-11 21:33:45

标签: asp.net-mvc

我在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);

  }

}

谢谢你, 米格尔

3 个答案:

答案 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" })