Trabajando en una aplicación ASP.NET MVC 3 (Razor), que se refiere principalmente a UGC (contenido generado por el usuario).¿Cuál es una forma limpia/SECA de mostrar las operaciones disponibles en el contenido del usuario?
Estoy trabajando en una zona "Q & A" - donde los usuarios pueden hacer preguntas, otros pueden responder, votar, etc.
Como tal, estoy tratando de encontrar una manera limpia de manejar las operaciones disponibles que un usuario puede hacer en cualquier página determinada, en función de su función y otros factores.
Considere el escenario de la "Página de detalles de la pregunta" (como esta página en Desbordamiento de pila).
Cualquier (autenticado) el usuario puede:
- Vote por la pregunta/respuesta
- respuesta propietario
pregunta puede:
- Editar
- Eliminar
- Marca la respuesta
Y así sucesivamente.
Ahora, tengo un QuestionViewModel
, que se utiliza para mostrar la pregunta y las respuestas relevantes para esta vista en particular.
Lo creo usando AutoMapper.
¿Cómo puedo mostrar "notas adhesivas" (por ejemplo, hipervínculos) en la página, en función de las operaciones disponibles?
Mi pensamiento actual es:
- creo una enumeración:
QuestionOperation
(respuesta, Editar, Desactivar, Voto, respuesta, etc.) - agrego una propiedad de tipo
IEnumerable<QuestionOperation>
a mi modelo de vista - Establecí esta propiedad en mi método de acción (HTTP GET), verificando si el usuario está autenticado y las funciones de las que forma parte.
- entonces yo uso un editor de plantillas para hacer de cada operación como un hipervínculo, utilizando
Html.ActionLink
¿se considera un enfoque limpio - o puede alguien sugerir una mejor?
Teniendo en cuenta que estoy reutilizando este QuestionViewModel
en tres páginas:
- El detalle de una pregunta página
- El "Haz una pregunta" página
- La "Edición de una pregunta" página
Por lo tanto, debido a que estas operaciones dependen de la página o del usuario, realmente no se puede hacer con AutoMapper.
leyó mi mente, eso es en realidad lo que terminó haciendo! Creé un método de acción llamado "ShowOptions", que tomó la identificación de la publicación (la hizo más genérica que la pregunta) y luego proporcionó una vista parcial. Luego lo hice usando un ajax '$ .get' (no quería que se procesara inmediatamente, sino que después de un clic en" Mostrar opciones "). Pero sí, esto es básicamente lo que terminé haciendo. Me alegra que estemos en la misma página! – RPM1984