Pergunta

Eu tenho as seguintes duas rotas definidas no meu aplicativo MVC;. - No momento eu tenho dois "MVC Visualização de páginas de conteúdo" definidos

/ShowName/NameById
/ShowName/Index

No entanto, o conteúdo dessas duas páginas são idênticos? É possível que duas rotas para compartilhar a mesma página de conteúdo? Se não, então eu a) pode criar uma regra única para ambas as rotas ou b) que eu deveria criar um usercontrol para compartilhar entre ambas as páginas de conteúdo para mostrar meus dados?

    routes.MapRoute(
       "NameById",
       "Name/{theName}/{nameId}",
        new
        {
            action = "NameById",
            controller = "ShowName",
            theName = "Charley"
        }
        ,new { nameId = @"\d+" }
   );

    routes.MapRoute(
       "ShowName",
       "Name/{theName}",
        new
        {
            action = "Index",
            controller = "ShowName",
            theName = "Charley"
        }
   );

Editar Eu li as respostas abaixo e eu tenho os seguintes métodos de resultado de ação. Se eu remover um dos métodos (por exemplo, o índice), então como eu poderia reescrever meus rotas a uma única rota?

public ActionResult Index(string theName)
public ActionResult NameById(string theName, int? nameId)

Assim, a seguir funciona o trabalho de url?

/Name/Charley
/Name/Charley/11234
Foi útil?

Solução

Você realmente precisa de 2 rotas diferentes? Você poderia tornar o padrão para a sua rota Índice

Name/{theName}/{nameId}

E FAÇA NameID a entrada anulável a sua ação. Em seguida, basta adicionar alguma lógica para sua ação que verifica se NameID tem um valor e age em conformidade.

Outras dicas

Você pode criar uma vista parcial para a área de detalhes da página, mantendo a separação das duas acções em caso de mudança em um momento posterior. Ou você poderia apenas

return View("DetailView", model);

Mas isso pode introduzir uma corda extra para gerenciar entre as duas ações do controlador. Desde MVC não suporta a sobrecarga pelo nome da ação (a menos que você tem um par GET / POST, um sem argumentos), você pode simplesmente verificar o parâmetro {NameID} e veja se ele está vazio / null antes de usá-lo.

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