2010-05-26 23 views
5

Me encuentro escribiendo mucho código en mis vistas que se parece al código siguiente. En este caso, quiero agregar algo de HTML explicativo para un principiante y HTML diferente para un usuario experto.Lógica de ramificación en una vista MVC

<% if (ViewData["novice"] != null) { %> 
some extra HTML for a novice 
<% } else { %> 
some HTML for an expert 
<% } %> 

Esta es la lógica de presentación, por lo que tiene sentido que esté en una vista frente al controlador. Sin embargo, se pone muy rápido, especialmente cuando ReSharper quiere mover todos los frenos para hacerlo aún más feo (¿hay alguna manera de desactivarlo para las vistas?).

Mi pregunta es si esto es correcto, o debo ramificar en el controlador a dos vistas separadas? Si hago dos vistas, tendré una gran cantidad de HTML duplicado para mantener.

¿O debería hacer dos vistas separadas con una vista parcial compartida de las cosas que están en común?

Respuesta

2

Idealmente, este tipo de lógica se manejaría en el modelo de vista y la vista solo debería representar el modelo.

lo que podría tener algo así como, en su opinión:

<%= ViewData["helptext"] %> 

y su lógica en el controlador sería algo así como:

ViewData["helpText"] = isNovice ? noviceText : expertText; 

esa manera se puede empujar a que la lógica de vuelta al controlador y mantenga sus puntos de vista agradables y limpios

+0

Puedo ver la ventaja de esto, pero ¿y si el texto es un marcado HTML complejo, digamos con imágenes y esas cosas? Ahora tienes HTML en tu controlador. Además, gracias por arreglar mi código ejemplo –

+0

Nice lomax mucho mejor. Me gusta. +1 –

+0

Depende de la situación con el texto complejo y de cuánto cambio se requiere, pero no veo por qué no se puede usar el mismo enfoque para representar las partes variables. – lomaxx

1

Está intentando crear 2 páginas html completamente separadas con modelos idénticos. Quieres una vista separada No intente sacar el patrón de diseño inteligente con lógica de ramificación condicional.

Los ayudantes de HTML no te ayudarán mucho aquí, ya que parece que no vas a repetir mucha lógica más que otra cosa.

+0

Todo lo que puedo decir es que incluso sin tener una lógica repetitiva preferiría usar un ayudante en lugar de duplicar el código. La duplicación del código solo causa dolores de cabeza de mantenimiento y debe ser mal vista por –

+0

. No creo que quiera una vista separada, ya que crearía una sobrecarga de mantenimiento adicional. Estaría más inclinado a llevar la lógica de vuelta al controlador y tener una sola vista limpia – lomaxx

+0

Puede poner código repetitivo en parciales, pero en general parece que quiere dos vistas separadas, es decir, "HTML diferente para un usuario experto". el código es malo, trabajar contra un patrón de diseño es peor IMO. –

Cuestiones relacionadas