Pergunta

Eu li este artigo sobre como você pode prefixar rotas em Ruby on Rails. Eu quero ser capaz de fazer a mesma coisa com asp.net MVC

Então, eu quero ser capaz de definir uma rota como:

/photographers/1/photos/2   //photo 2 of photographer with id 1
/photographers/1/photos     //all of photographer with id 1

Todas as dicas?

EDIT:

"fotógrafos / {id} / photos / {Photoid}" - parece estar a fazer o trabalho muito bem, mas como eu posso apoiar

RedirectToAction<PhotosController>(x => x.Add());

Gostaria de redirecionar para: / fotógrafos / 1 / photos / add

Foi útil?

Solução

Defina a sua rota como esta:

routes.MapRoute(
    "Photographers",
    "photographers/{id}/photos/{photoID}",
    new { controller = "Photographers", action = "Photo", photoID = null });

Em seguida, definir o seu ação do controlador como este:

public ActionResult Photo(int id, int? photoID)
{
    // If photoID is not null, show just that photo.
    // Otherwise, show all photographs.
}

Outras dicas

Você pode usar regex roteamento ou usar curingas em sua tabela de roteamento para que a {id *} corresponde a /1/photos/2 para o controlador padrão fotógrafos, analisar a cadeia, e redirecionamento para uma ação apropriada.

Também dê uma olhada este post sobre recursos aninhados.

RouteTable.Routes.Add(
        new Route { Url = "events/[eventId]/tickets/[action]/[id]", 
                    Defaults = new { controller = "Tickets", 
                                     action = "List", id = (string)null }, 
                    RouteHandler = typeof(MvcRouteHandler) });
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top