Tengo un formulario que publica lo que es efectivamente un diccionario de objetos para mi acción de controlador. Así obtenemos una IEnumerable<EditThemeAttributeModel>
¿Por qué la carpeta del modelo asp.net mvc produce system.string []
public class EditThemeAttributeModel
{
public string Name { get; set; }
public object Value { get; set; }
}
Cuando miro a la colección Request.Form veo lo que esperaría:
[1] "Attributes[0].Name" string
[2] "Attributes[0].Value" string
[3] "Attributes[1].Name" string
[4] "Attributes[1].Value" string
[5] "Attributes[2].Name" string
[6] "Attributes[2].Value" string
Sin embargo, cuando intento un intento de obtener el valor de una de las EditThemeAttributeModel
no es un tipo simple como me esperaba, es una matriz de cadenas:
- Value {string[1]} object {string[]}
[0] "#ffffff" string
puedo evitar esto usando la colección Request.Forms directamente, pero sólo quería unders y este comportamiento.
sí Lo sé, pero esa no era la pregunta. La pregunta es por qué el encuadernador de modelos produce una matriz de cadenas 'cadena []' cuando le pasamos una colección de objetos. –
Porque de forma predeterminada puede incluir varios valores para el mismo nombre para un valor de publicación determinado. 'id = 1 & id = 2 & id = 3' ya que no estás pidiendo específicamente' 'cadena'' sino' 'objeto', la carpeta de modelo asume que puede ser una matriz porque no puede convertirla directamente a un tipo. La creación de la matriz es la última llamada de la carpeta de encuadernación porque básicamente no podía descifrar lo que realmente quería. Debo decir que está haciendo esto solo para estar seguro. – Buildstarted
Puede seguir el código del modelo de encuadernación en la fuente y ver por qué exactamente está haciendo lo que está haciendo. Lo hice hace un tiempo para responder una pregunta similar que tuve al crear un encuadernador de modelo automático. http://aspnet.codeplex.com/SourceControl/changeset/view/68345#266460 mira 'BindSimpleModel' (la conversión real está en ValueProviderResult) – Buildstarted