Domanda

Sto cercando di identificare come mappare un percorso per / News / 5 al mio controller di notizie.

Questo è il mio NewsController:

public class NewsController : BaseController
{
    //
    // GET: /News

    public ActionResult Index(int id)
    {
        return View();
    }

}

Questa è la mia regola Global.asax.cs:

        routes.MapRoute(
            "News", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "News", action = "Index", id = -1 } // Parameter defaults
        );

Provo ad andare su / News / 5 ma ricevo un errore di risorsa non trovata, tuttavia quando vado a / News / Index / 5 funziona?

Ho provato solo {controller}/{id} ma questo ha prodotto lo stesso problema.

Grazie!

È stato utile?

Soluzione

La tua rotta {controller}/{id} era corretta ma probabilmente l'hai registrata DOPO l'altra rotta.Nell'elenco delle rotte cerca dall'alto verso il basso e la prima corrispondenza che trova vince.

Per aiutare a guidare il routing, suggerirei di creare vincoli di route per garantire che # 1 esista il controller e # 2 il {id} sia un numero.

Consulta questo articolo

Principalmente:

 routes.MapRoute( 
        "Index Action", // Route name 
        "{controller}/{id}", // URL with parameters EDIT: forgot starting "
        new { controller = "News", action = "Index" },
        new {id= @"\d+" }
    ); 

Altri suggerimenti

Devi assicurarti che il tuo nuovo percorso sia prima del percorso predefinito, in questo modo:

    routes.MapRoute(
        "NewsAbbr", // Route name
        "{controller}/{id}", // URL with parameters
        new { controller = "News", action = "Index", id = -1 } // Parameter defaults
    );


    routes.MapRoute(
        "News", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "News", action = "Index", id = -1 } // Parameter defaults
    );
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top