【问题标题】:ASP.NET MVC Unbind Action ParameterASP.NET MVC 解除绑定操作参数
【发布时间】:2009-10-27 05:08:56
【问题描述】:

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

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

我尝试将文本框声明为 但该值仍然保留。我也尝试使用 [Bind(Exclude="value1")] 但这不适用于单个变量。

更新 2:

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

【问题讨论】:

    标签: asp.net-mvc parameters action


    【解决方案1】:

    尝试调用

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

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

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

    【讨论】:

    • 试过了,但它似乎删除了对文本框所做的任何验证。因此,在我的问题示例中,如果我在文本框中为“value1”提供“hi”,则不会显示验证。
    • 更新:我正在为用于验证码(自定义解决方案)输入的文本框执行此操作。我希望在页面加载时清除文本框,但我希望保留验证。
    • 啊,好点子。对不起。我用应该工作的方法更新了答案。
    • 菲尔,很高兴你看到了这个问题。这个问题的原始版本甚至没有提到模型验证,我被难住了。
    • 它工作,但这是一个丑陋的黑客......不敢相信甚至通过了设计阶段;哎呀
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 抱歉这个含糊的问题。深夜起床,并没有意识到这是多么模糊。
    • 没有 MVC 模型绑定存储尝试的值字典吗?我没有向视图传递任何内容,它会自动完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-05
    • 2010-10-13
    • 2017-07-16
    • 1970-01-01
    • 2019-10-01
    相关资源
    最近更新 更多