Pregunta

Tengo las siguientes dos rutas definidas en mi aplicación MVC. Por el momento tengo dos "MVC Ver páginas de contenido" definido

/ShowName/NameById
/ShowName/Index

¿Sin embargo, el contenido de estas dos páginas es idéntico? ¿Es posible que dos rutas compartan la misma página de contenido? Si no es así, ¿puedo a) crear una sola regla para ambas rutas o b) ¿debería crear un control de usuario para compartir entre ambas páginas de contenido y mostrar mis datos?

    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 He leído las respuestas a continuación y tengo los siguientes métodos de resultado de acción. Si elimino uno de los métodos (por ejemplo, el índice), ¿cómo reescribiría mis rutas en una sola ruta?

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

¿Entonces el siguiente funciona el trabajo de url?

/Name/Charley
/Name/Charley/11234
¿Fue útil?

Solución

¿Realmente necesitas 2 rutas diferentes? Podría hacer el patrón para su ruta de índice

Name/{theName}/{nameId}

y haga de nameId una entrada anulable a su acción. Luego, agregue un poco de lógica a su acción que verifica si nameId tiene un valor y actúa en consecuencia.

Otros consejos

Puede crear una vista parcial para el área de detalle de la página, manteniendo la separación de las dos acciones en caso de que cambien en un momento posterior. O podrías simplemente

return View("DetailView", model);

Pero eso puede introducir una cadena adicional para administrar entre las dos acciones del controlador. Dado que MVC no admite la sobrecarga por nombre de acción (a menos que tenga un par GET / POST, uno sin argumentos), puede verificar el parámetro {nameId} y ver si está vacío / nulo antes de usarlo.

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