Cómo crear un editor para una cadena que contiene una clase serializada en MVC3

Tengo una propiedad de cadena en mi ViewModel que contiene una representación serializada de una de las diez clases posibles, cada clase es muy diferente, por lo que no hay una clase base para ellas.

public string Configuration { get; set; }
public string ConfigurationType { get; set;}

Idealmente, me gustaría crear una plantilla de editor diferente para cada una de las clases que podrían deserializarse en la propiedad y simplemente tener

<%= Html.EditorFor(l => l.Configuration)%>

Donde de alguna manera podría informar a mvc que la configuración debe deserializarse en un objeto de ConfigurationType para que use la plantilla correcta y luego deserializarse nuevamente a una cadena.

Aprecio que soy ligero en los detalles aquí, pero me gustaría mantener las cosas lo más abstractas posible para no enturbiar demasiado las aguas.

preguntado el 28 de julio de 12 a las 11:07

1 Respuestas

Creo que probablemente debería considerar abordar el problema en cuestión de manera diferente. No conozco los detalles de su problema, pero a partir de la información que ha proporcionado, creo que la siguiente podría ser una solución factible:

  1. Créar un ConfigurationBase class que contiene las propiedades comunes de las 10 clases.
  2. En lugar de tener el Configuration la propiedad sea del tipo String, que sea genérico, es decir: T. En consecuencia, su modelo de vista también debe ser un tipo genérico, donde el parámetro de tipo debe estar restringido a ConfigurationBase y new() (porque debe ser serializado/deserializado).
  3. Ahora que su clase es genérica, no necesita el ConfigurationType propiedad, así que elimínela.
  4. Cree un editor para cada subclase de ConfigurationBase.
  5. Opcionalmente, puede crear un método en su modelo de vista que serialice la instancia de configuración en un String si eso es realmente necesario.

Verifique el código a continuación:

public class MyViewModel<T> where T : ConfigurationBase, new() 
{
   public T Configuration {get; set; }

   public String SerializeConfiguration() 
   {
      //return the serialized this.Configuration
   }
}

Respondido 28 Jul 12, 22:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.