Domanda

Ho i seguenti due percorsi definiti nella mia app MVC.; - Al momento ho due "MVC Visualizza pagine di contenuti" definita

/ShowName/NameById
/ShowName/Index

Tuttavia, il contenuto di queste due pagine è identico? È possibile che due percorsi condividano la stessa pagina di contenuti? In caso contrario, posso a) creare una singola regola per entrambe le rotte o b) devo creare un controllo utente da condividere tra le due pagine di contenuti per mostrare i miei dati?

    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"
        }
   );

Modifica Ho letto le risposte di seguito e ho i seguenti metodi di risultato dell'azione. Se rimuovo uno dei metodi (ad es. L'indice), come riscriverei i miei percorsi su un singolo percorso?

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

Quindi le seguenti opere funzionano di url?

/Name/Charley
/Name/Charley/11234
È stato utile?

Soluzione

Hai davvero bisogno di 2 percorsi diversi? È possibile creare il modello per il percorso dell'Indice

Name/{theName}/{nameId}

e trasforma nameId in un input nulla alla tua azione. Quindi aggiungi un po 'di logica all'azione che controlla se nameId ha un valore e agisce di conseguenza.

Altri suggerimenti

È possibile creare una vista parziale per l'area dei dettagli della pagina, mantenendo la separazione delle due azioni nel caso in cui cambino in un secondo momento. O potresti semplicemente

return View("DetailView", model);

Ma ciò può introdurre una stringa aggiuntiva da gestire tra le due azioni del controller. Poiché MVC non supporta il sovraccarico in base al nome dell'azione (a meno che tu non abbia una coppia GET / POST, una senza argomenti), puoi semplicemente controllare il parametro {nameId} e vedere se è vuoto / null prima di usarlo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top