0

是否可以禁用某个操作参数在请求中保留其值?

[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”的值。

我试图将文本框声明为 <%= Html.TextBox("value1", null) %> 但该值仍然保留。我也尝试使用 [Bind(Exclude="value1")] 但这对单个变量不起作用。

更新 2:

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

4

2 回答 2

4

试着打电话

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

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

这样做是保留与键“value1”相关的所有错误,但用空值替换该值。

于 2009-10-28T23:57:24.690 回答
3

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

视图是什么样的?此操作方法是通过 GET 还是 POST 调用的?您的方法中包含的“做事”是什么?

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

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

于 2009-10-27T06:01:14.417 回答