是否可以禁止某个操作参数在请求之间保留其值?

[HttpPost]
public ActionResult MyAction(string value1, string value2)
{
        if(value1=="hi")
             ModelState.AddModelError("value1", "Can't have hi");
        //do stuff
        if(ModelState.IsValid)
           return RedirectToAction("Finish");
        else
           return View()
}


[HttpGet]
public ActionResult MyAction()
{
        return View()
}

视图由一个带有两个输入框(value1和value2)的简单表单组成。提交并验证失败后,将返回视图。我希望视图中的文本框的值始终为空。

文本框的值<!>“; value1 <!>”;如果模型无效,则保留。

我尝试将文本框声明为<!> lt;%= Html.TextBox(<!> quot; value1 <!> quot;,null)%<!> gt;但价值仍然保留。我也尝试使用[Bind(Exclude = <!> quot; value1 <!> quot;)],但这不适用于单个变量。

更新2:

我正在为一个用于Captcha(自定义解决方案)输入的文本框执行此操作。我希望在页面加载时清除文本框,但我希望保留验证。

有帮助吗?

解决方案

尝试拨打

ModelState["value1"].Value 
  = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);

从控制器操作中返回视图之前

这样做可以保留与键<!>“value1 <!>”;相关的所有错误,但是将值替换为空值。

其他提示

你在做什么导致它被保留?除非你编写代码或使用表单字段来实现这一点,否则MVC中没有像ViewState这样的东西会将值保留在多个请求中。

视图是什么样的?这个动作方法是通过GET还是POST调用的?什么是<!>“;做东西<!>”;包含在你的方法中?

修改:您仍在显示示例代码中的内容。那些东西是否包含对ViewData的任何引用?你的问题是关于绑定,但我没有看到任何绑定发生。也许这超出了我的理解。

编辑2:很高兴菲尔看到了这个!最初的问题没有提到ModelState。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top