【问题标题】:How do I change a value in the ModelState, so that it will be valid, using ASP.NET MVC?如何使用 ASP.NET MVC 更改 ModelState 中的值,使其有效?
【发布时间】:2026-01-26 02:10:01
【问题描述】:

我目前允许选择列表的初始值为“”。用户可以选择是否填写此选项或保留默认值。

此 selectList 适用于 ID,其中 ID 传递给我的控制器。但是,由于未选择 int,ModelState 会导致 False,因为输入是空字符串而不是 int。

我想将此空字符串的值更改为 0。这将导致 ModelState 为 True。我一直在查看 ModelState 字典类,以便在检查 ModelState 之前更改键、值对。但是,我一直无法成功使用这个。
https://msdn.microsoft.com/en-us/library/system.web.mvc.modelstatedictionary(v=vs.118).aspx

任何帮助将不胜感激。

【问题讨论】:

  • 你能不能像public int?那样让int属性可以为空
  • 你可以使用模型绑定器,你可以设置这个属性的默认值,你可以在生成视图之前添加一对带有"" - 0对的值到集合中等等。问题是怎么做您创建了视图以及在那里传递的数据模型是什么样的?

标签: c# asp.net asp.net-mvc asp.net-mvc-4


【解决方案1】:

尝试使用

ModelState.SetModelValue("PropertyID", new ValueProviderResult("New value", "", CultureInfo.InvariantCulture));

这是一篇有用的文章。

http://geekswithblogs.net/BobHardister/archive/2013/03/11/retain-and-set-posted-checkbox-value-in-the-mvc-4.aspx

【讨论】:

    【解决方案2】:

    你可以删除错误

    if (ModelState.ContainsKey("{key}"))
        ModelState["{key}"].Errors.Clear();
    
    if (ModelState.IsValid)
    {
    }
    

    【讨论】:

    • 谢谢,这在更改值后非常有用。正如我在更改值时发现的那样,相关错误仍然存​​在。 :)