Différences de routage Asp.Net MVC dans www.Mysite.com/Employee et www.Mysite.com/Employee/ tout en utilisant JqGrid

StackOverflow https://stackoverflow.com/questions/1417200

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

  1. Si je tape www.Mysite.com/Employee/ dans le navigateur, un appel est effectué vers

    .
      

    www.Mysite.com/Employee/GetGridData

  2. Si je tape www.Mysite.com/Employee dans le navigateur, un appel est lancé à

    .
      

    www.Mysite.com/GetGridData

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.

Était-ce utile?

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

Le navigateur enverra cette demande au même niveau que l'employé qui semble être sur:

  

exemple.com/GetGriddata

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top