【问题标题】:If a key does not exist in the ModelState, how can I add it? aspnetmvc1如果 ModelState 中不存在某个键,我该如何添加它? aspnetmvc1
【发布时间】:2011-01-10 13:32:48
【问题描述】:

我正在尝试在我的控制器中创建一个解决方法,以处理 ASP.NET MVC v1 中的错误。如果您发布一个未选择任何内容的列表框 (http://forums.asp.net/p/1384796/2940954.aspx),则会出现该错误。

快速解释: 我有一份报告,它接受来自文本框的两个日期和来自 ListBox 的一个或多个选择。如果列表框没有选择任何内容,则除了验证之外一切正常。

当表单发布并到达我的控制器时,模型包含所有必要的项目。但是,ModelState 不包含列表框的键/值。为了解决这个问题,我希望这样的事情可以解决问题:

if (!ModelState.ContainsKey("TurnTimeReportModel.Criteria.SelectedQueuesList") || ModelState["TurnTimeReportModel.Criteria.SelectedQueuesList"] == null) {
            ModelState.Keys.Add("TurnTimeReportModel.Criteria.SelectedQueuesList");
            ModelState["TurnTimeReportModel.Criteria.SelectedQueuesList"].Equals(new List<string>());
        }

不幸的是,当我尝试添加密钥时,这会引发以下异常: System.NotSupportedException:不允许更改从字典派生的密钥集合。

有什么想法吗?

提前致谢!

【问题讨论】:

    标签: asp.net-mvc modelstate


    【解决方案1】:

    直接使用ModelState.Add方法:

    ModelState.Add("TurnTimeReportModel.Criteria.SelectedQueuesList", 
                   new ModelState{ AttemptedValue = new List<string>() } )
    

    【讨论】:

    • 感谢您的回复!我会试试这个,看看它的表现如何。
    • 感谢您的好评!这也帮助了我。在单元测试中使用模拟控制器遇到了这个问题,这成功了!
    【解决方案2】:

    我最终选择了以下方法:

                if (ModelState.ContainsKey("TurnTimeReportModel.Criteria.SelectedQueuesList") && ModelState["TurnTimeReportModel.Criteria.SelectedQueuesList"] == null) {
                ModelState["TurnTimeReportModel.Criteria.SelectedQueuesList"].Value = new ValueProviderResult("", "", CultureInfo.CurrentUICulture);
            } else if (!ModelState.ContainsKey("TurnTimeReportModel.Criteria.SelectedQueuesList")) {
                ModelState.Add("TurnTimeReportModel.Criteria.SelectedQueuesList", new ModelState{Value = new ValueProviderResult("","",CultureInfo.CurrentUICulture)});
            }
    

    【讨论】:

      猜你喜欢
      • 2021-09-08
      • 2015-05-18
      • 2020-02-20
      • 2021-11-06
      • 1970-01-01
      • 2013-04-29
      • 1970-01-01
      • 2012-06-22
      • 1970-01-01
      相关资源
      最近更新 更多