2010-01-28 6 views
5

Estoy intentando crear una solución en mi controlador que maneja un error en ASP.NET MVC v1. El error ocurre si publica un cuadro de lista que no tiene nada seleccionado (http://forums.asp.net/p/1384796/2940954.aspx).Si no existe una clave en el ModelState, ¿cómo puedo agregarla? aspnetmvc1

Explicación rápida: Tengo un informe que acepta dos fechas de cuadros de texto y una o más selecciones de un ListBox. Todo funciona excepto la validación si el cuadro de lista no tiene nada seleccionado.

Cuando el formulario se publica y llega a mi controlador, el modelo contiene todos los elementos necesarios. Sin embargo, ModelState no contiene una clave/valor para el cuadro de lista. Para resolver, esperaba algo como esto haría el truco:

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>()); 
     } 

Desafortunadamente, esto arroja la siguiente excepción cuando trato de agregar la clave: System.NotSupportedException: La mutación de una colección clave derivada de un diccionario No se permite.

¿Alguna idea?

¡Gracias de antemano!

Respuesta

2

Terminé yendo con los siguientes elementos que ha hecho el truco:

  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)}); 
     } 
4

utilizar el método de ModelState.Add directamente:

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

Gracias por la respuesta! Voy a probar esto y ver cómo funciona en comparación. – BueKoW

+0

¡Gracias por la buena respuesta! Esto también me ayudó. Estaba enfrentando este problema con un controlador burlado en una prueba unitaria y ¡esto funcionó! – Rob

Cuestiones relacionadas