Pregunta

Tengo, creo, una URL compleja para tratar en ASP MVC 1.0: Todas mis acciones en la mayoría de los controladores requieren dos parámetros todo el tiempo: Cuenta y Proyecto. Esto se suma a los requisitos de cada acción. Esto significa que una URL típica es así:

http://abcd.com/myaccount/projects/project_id/sites/edit/12

En este ejemplo: myaccount es el nombre de la cuenta. Los proyectos pueden ser un controlador, otras opciones son como ubicaciones , empleados . project_id es la identificación de un proyecto dentro de myaccount , sitios podría ser un controlador, otras opciones son como staff o pagos . editar es una acción y 12 es la identificación del sitio editado. (espero que esto sea lo suficientemente claro)

Ahora una opción es crear una ruta y pasar project_id y cuenta en todas las acciones de los controladores agregando dos parámetros adicionales a todas las acciones. Esto no es realmente deseado y tampoco estoy seguro de que los dos controladores (proyectos y sitios) funcionen aquí.

Mi situación ideal es usar algún tipo de contexto que viaje con la llamada a la acción del controlador y almacenar project_id y myaccount allí. El resto de los parámetros pueden tratarse de manera normal como:

// sitescontroller
public ActionResult Edit(string id)
{
string account = somecontext["account"];
string project_id = somecontext["project"];
// do stuff
}

¿Alguna idea de cómo / dónde puede suceder esto? Además, ¿cómo funcionará esto con ActionLink (es decir, generar enlaces correctos basados ??en este contexto)?

¡Gracias!

¿Fue útil?

Solución

Primero debe agregar los tokens a sus rutas como {empresa} / projects / {project} {controller} / {action} / {id} . Luego, si escribió su propia IControllerFactory, entonces sería muy fácil insertar los valores de RouteData en el controlador a través del constructor o de la forma en que quisiera hacerlo. Probablemente la forma más fácil de comenzar sería subclasificar DefaultControllerFactory y anular el método CreateController.

Otros consejos

Esto no tiene mucho sentido para mí. ¿Por qué tendría una ruta similar a la siguiente?

{controller}/{id}/{controller}/{id}

?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top