Sto cercando di impostare il routing personalizzato con il seguente itinerario mappatoasp.net-MVC: Dizionario parametri contiene una voce null per il parametro
edit: il mio percorso pieno config
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
#region FixtureAdmin
routes.MapRoute(
name: "FixtureEdit",
url: "{controller}/{action}/{id}",
defaults: new { controller = "FixtureAdmin", action = "Edit", id = UrlParameter.Optional }
);
#endregion
#region Results
routes.MapRoute(
name: "ResultAdd",
url: "{controller}/{action}/{fixtureId}",
defaults: new { controller = "Result", action = "Add", fixtureId = UrlParameter.Optional }
);
#endregion
E il mio controller codice
public ActionResult Add(int fixtureId)
{
// return model to view etc..
}
Si tratta di un'eccezione, anche se il parametro è stato specificato come facoltativo.
Il dizionario parametri contiene una voce null per il parametro 'fixtureId'
La cosa strana è, se cambio il parametro della action Aggiungi al solo 'Id' quindi il seguente URL funzionerà Risultato/Aggiungi/1. Sono confuso, c'è qualche routing predefinito che sta sovrascrivendo quello personalizzato? Perché cambiare il parametro in "Id" funziona?
Modifica
solo per testare, ho aggiunto un altro parametro all'azione
public ActionResult Add(int? fixtureId, int? testId)
Ho poi modificato il percorso di conseguenza e ora funziona, quindi mi sa che è un problema con il routing di default .
è il loro qualsiasi altro percorso configurato anche prima o dopo questo – rajansoft1
Se si vuole essere in grado di chiamare 'Add' senza specificare l'id,' fixtureId' dovrebbe essere annullabile - 'int? fixtureId'. "Opzionale" nel contesto del percorso significa che non deve essere presente nell'URL, in modo che tu possa avere azioni come "public ActionResult Add() {/ * no parameters * /}' – Alex
L'unica cosa che posso pensare è che stai usando un int che non è annullabile? L'id è probabilmente inserito nel framework MVC, quindi probabilmente funziona diversamente. – David