Я пытаюсь создать обходное решение в своем контроллере, который обрабатывает ошибку в 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());
}
Unfortuantely, это выдает следующее исключение, когда я пытаюсь добавить ключ: Система. NotSupportedException: Видоизменение ключевого набора, полученного на основании словаря, не позволяется.
Какие-либо идеи?
Заранее спасибо!
Я закончил идти со следующим, который сделал трюк:
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)});
}
Используйте метод ModelState.add напрямую:
ModelState.Add("TurnTimeReportModel.Criteria.SelectedQueuesList",
new ModelState{ AttemptedValue = new List<string>() } )