2010-08-12 19 views
6

Por ejemplo, tengo un modelo X con propiedades Título (cadena) y Válido (bool). Necesito mostrar el mismo modelo en dos páginas separadas con diferentes etiquetas de campo y controles de entrada. P. ej. "Título" para el título y "Válido" para válido en un formulario, mientras que "Destino" para el título y "Devolución" para válido en el otro.Qué es ASP.NET MVC 2 formas de representar el mismo modelo de dos formas diferentes

Supongo que la manera más fácil sería tener dos vistas diferentes para el mismo modelo. Pero, ¿es realmente una forma de MVC?

Gracias

+0

Huelga mi último comentario sobre mi respuesta, ya que aparentemente es difícil alejarse del enfoque de modelo único, veamos si podemos encontrar una solución de todos modos. Pregunta: ¿Tiene alguna forma de diferenciar los dos Modelos en términos de los datos en ellos? –

+0

Básicamente sí. Para mantener nuestra muestra trivial, digamos que el modelo X tiene una propiedad más DataType (int) con valores posibles 1 o 2. – Ramunas

Respuesta

3

Bueno, digamos que tiene alguna carpeta de vista llamada Lista, y una llamada Detalles - y que muestra el Modelo en las dos debería ser diferente.

Puede crear una carpeta DisplayTemplates dentro de cada una de las dos carpetas y crear un control parcial con mismo nombre como su modelo y también escribirlo fuertemente en su modelo.

En sus diferentes puntos de vista a continuación, puede hacer <%= Html.DisplayFor(your model) %> o también puede utilizar la regularmente <% Html.RenderParital("NameOfPartial", ModelX); %>

Editar Para tratar de acercarse a la pregunta original, tal vez esto le puede ayudar de alguna manera (he publicado esto como una respuesta a una pregunta diferente How to change [DisplayName“xxx”] in Controller?)

public class MyDisplayName : DisplayNameAttribute 
{ 
    public int DbId { get; set; } 

    public MyDisplayName(int DbId) 
    { 
     this.DbId = DbId; 
    } 


    public override string DisplayName 
    { 
     get 
     { 
      // Do some db-lookup to retrieve the name 
      return "Some string from DBLookup"; 
     } 
    } 
} 

    public class TestModel 
    { 
     [MyDisplayName(2)] 
     public string MyTextField { get; set; } 
    } 

tal vez se podría reescribir la medida atributo para hacer algún tipo de Nombre-selección basada en la lógica, y de esa manera utilizar el mismo para ambos PartialView modelo de VARIATI ons?

+0

Sí, esa es la forma en que lo he implementado. Pero lo que me hizo hacer estas preguntas es que pierdo la posibilidad de usar anotaciones de datos y el encanto que me da. Tenía la esperanza de que alguien elabore sobre el uso de algún tipo de clase intermedia para uno de mis puntos de vista. Tal vez es más complicado, pero ¿una forma MVC de hacer cosas como esta? – Ramunas

+0

Y una cosa más acerca de las carpetas.No es como representar el mismo modelo en las vistas de Lista y Detalles, es más como representar el mismo modelo en Controller1/Edit/1 y Controller2/Edit/2 views. Técnicamente es el mismo modelo que representa dos entidades comerciales diferentes (como producto y ruta en mi ejemplo trivial) – Ramunas

+0

Para ser honesto, me gustaría dejar de usar el mismo modelo para dos objetos de entidad totalmente diferentes. ¿Qué sucede si decides hacer que el Producto sea ligeramente diferente a la Ruta más adelante? Tendría que hacer lo siguiente: 1. Haga los cambios iguales para ambos - o - 2. Cree un nuevo modelo y revise su código cambiando dondequiera que use la ruta para el producto o viceversa. Como dices, no quieres perder el encanto de las anotaciones, y estoy totalmente de acuerdo, así que realmente no veo ninguna ventaja de usar el mismo modelo para dos entidades diferentes. –

1

¿Es realmente el mismo modelo?

Si son dos entidades diferentes con propiedades similares, crearía dos modelos de vista separados. Cualquier cosa en común se podría poner en una clase base o interfaz abstracta.

Si es el mismo modelo pero solo una pantalla de entrada diferente, entonces seguro, reutilice el modelo.

Me imagino que el primer caso es probablemente el que es relevante aquí.

+0

Sí, ES el mismo modelo desde la vista técnica. Pero al mismo tiempo hay dos modelos desde el punto de vista comercial. Y sí, sé que suena a mierda, pero así son las cosas. – Ramunas

2

Sí, dos vistas diferentes son apropiadas, ya que proporciona dos VISTAS diferentes de su MODELO.

Sin embargo, ¿está seguro de que no está calzando sus datos en un solo modelo, cuando de hecho representa una entidad diferente en cada caso?

+0

Ver mis comentarios a la respuesta de Yngve B. Nilsen, por favor. Sí, tiene razón, estoy usando un modelo para diferentes entidades, pero es la única manera de involucrarse en la refacturación de una solución empresarial durante un año más o menos. – Ramunas

Cuestiones relacionadas