Pergunta

Eu tenho - eu acho - uma URL complexa de lidar com a ASP MVC 1.0: Todas as minhas ações na maioria dos controladores exigem dois parâmetros o tempo todo: Conta e Projeto. Esta é em cima das necessidades de cada ação. Isso significa que um URL típico é assim:

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

Neste exemplo: myaccount é o nome da conta. projetos pode ser um controlador, outras opções são como locais , funcionários . project_id é o ID de um projeto dentro de myaccount , locais pode ser um controlador, outras opções são como equipe ou pagamentos . Editar é uma ação e 12 é o ID do site editado. (Espero que isso é suficiente clara)

Agora, uma opção é criar uma rota e passar project_id e conta em todas as acções de controladores adicionando dois parâmetros extras para todas as ações. Esta não é realmente desejado e também não tenho a certeza os dois controladores (projetos e sites) estão indo para o trabalho aqui.

A minha situação ideal é usar algum tipo de contexto que viaja com a chamada para a ação do controlador e armazenar project_id e myaccount lá. O resto dos parâmetros podem então ser tratados de uma forma normal, como:

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

Todas as idéias a respeito de como / onde isso pode acontecer? Também como é que isto vai trabalhar com ActionLink (ou seja, gerar as ligações corretas com base neste contexto)?

Obrigado!

Foi útil?

Solução

Você primeiro precisa adicionar as fichas para suas rotas como {company}/projects/{project}{controller}/{action}/{id}. Então, se você escreveu seu próprio IControllerFactory então seria muito fácil para empurrar os valores do RouteData para o controlador via o construtor ou no entanto que queria fazê-lo. Provavelmente, a maneira mais fácil de começar seria a subclasse DefaultControllerFactory e substituir o método CreateController.

Outras dicas

Isto não muito sentido para mim. Por que você tem uma rota que é semelhante ao seguinte:

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

?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top