Différences de routage Asp.Net MVC dans www.Mysite.com/Employee et www.Mysite.com/Employee/ tout en utilisant JqGrid
-
06-07-2019 - |
Question
J'utilise ASP.NEt MVC pour l'un de mes projets. En cela, j'ai un contrôleur d'employé qui peut être appelé par www.Mysite.com/Employee / url.
J'ai aussi utilisé JqGrid qui utilise followng pour récupérer des données
url: "GetGridData"
Tout en testant la même chose, j'ai constaté que
-
Si je tape www.Mysite.com/Employee/ dans le navigateur, un appel est effectué vers
.www.Mysite.com/Employee/GetGridData ??p>
-
Si je tape www.Mysite.com/Employee dans le navigateur, un appel est lancé à
.www.Mysite.com/GetGridData ??p>
Remarque: le manque / à la fin du second appel.
Comment rectifier cela car il y a de fortes chances pour que l'utilisateur final puisse saisir cette URL dans le navigateur.
La solution
Je regarderais comment vous demandez à JqGrid de passer son appel de service Web - car il ne saura rien du moteur de routage de MVC par défaut - et tout cela se passe côté client.
Sortir du MVC pendant une minute, si j'ai une page:
exemple.com/page1.aspx
Et créez un lien relatif vers une autre page:
<a href="page2.aspx">Click here</a>
Le navigateur cherchera page2.aspx au même niveau que page1.aspx, c'est-à-dire.
exemple.com/page2.aspx
Si je déplace la page 1 vers un nouveau dossier:
example.com/NewFolder/page1.aspx
Le navigateur vous demandera
example.com/NewFolder/page2.aspx
lorsqu'un utilisateur clique sur le lien.
La même chose se produit lors de votre appel GetGridData: le navigateur Web le transmet à votre serveur en fonction des informations dont il dispose.
Donc si votre page répond le:
exemple.com/Employee
Et demande une requête relative à:
GetGridData ??p>
Le navigateur enverra cette demande au même niveau que l'employé qui semble être sur:
exemple.com/GetGriddata ??p>
Ce qui échoue ensuite car le moteur de routage ne trouve pas de route pour cette requête.
Vous devriez envisager de générer l'URL de l'appel GetGridData de manière dynamique via le système de routage, ce qui garantira qu'il est construit comme suit:
url: "/Employee/GetGridData"
Modification finale à ajouter
Oublié de mentionner, vous devriez probablement utiliser Méthodes d'action UrlHelper pour cela:
url: <%=Url.Action("GetGridData")%>
Ceci générera un chemin d'accès à la méthode GetGridData sur le contrôleur actuel. Si vous devez accéder à un autre contrôleur ou transmettre certaines valeurs, des surcharges peuvent vous aider.
Autres conseils
Essayez de déboguer votre route: Phil Haack: débogueur de routage ASP.NET