如果ModelState中不存在某个键,我该如何添加它?aspnetmvc1

Bue*_*KoW 5 asp.net-mvc modelstate

我试图在我的控制器中创建一个解决方法来处理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>());
        }
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我尝试添加密钥时,会抛出以下异常:System.NotSupportedException:不允许变换 从字典派生的密钥集合.

有任何想法吗?

提前致谢!

wom*_*omp 5

直接使用ModelState.Add方法:

ModelState.Add("TurnTimeReportModel.Criteria.SelectedQueuesList", 
               new ModelState{ AttemptedValue = new List<string>() } )
Run Code Online (Sandbox Code Playgroud)


Bue*_*KoW 3

我最终采用了以下方法,达到了目的:

            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)});
        }
Run Code Online (Sandbox Code Playgroud)