Если ключ не существует в ModelState, как я могу его добавить? aspnetmvc1 - PullRequest
5 голосов
/ 28 января 2010

Я пытаюсь создать обходной путь в моем контроллере, который обрабатывает ошибку в 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: не разрешается изменять коллекцию ключей из словаря.

Есть идеи?

Заранее спасибо!

Ответы [ 2 ]

5 голосов
/ 28 января 2010

Используйте метод ModelState.Add напрямую:

ModelState.Add("TurnTimeReportModel.Criteria.SelectedQueuesList", 
               new ModelState{ AttemptedValue = new List<string>() } )
2 голосов
/ 28 января 2010

Я закончил тем, что сделал следующее:

            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)});
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...