9
votes

HTML.ActionLink Construire un lien incorrect lorsqu'un itinéraire non MVC est ajouté

J'ai une application ici avec un mélange de webForm et MVC. Je spécifie le routage comme ci-dessous xxx

de sorte que le chemin virtuel sur "télécharger / nouveau" correspond à une page WebForm ASPX.

mais mon problème est que html.actionLink ("Test", "contrôleur", "action") rend désormais

/ upload / neuf? Contrôleur = Controller & Action = Action

Ayant examiné le code source MVC, je comprends que c'est parce que ActionLink appelle à ROUTÉCOLLEX.GETVIRTUALPATH (DemandeContext, routename, MergetsDrouteEvalues) , où routename est laissé à Null. Et en quelque sorte, cette valeur par défaut d'utiliser la route ASPXROUTE pour construire l'URL. J'ai essayé d'ajouter un autre itinéraire avant "aspxroute", mais il semble que cela parlait toujours sur le non-mvc routierhandler un.

Comment va routectuollection.getutualpath se comporter lorsque la routename est NULL? Et pourquoi est-il se comporter de cette façon pour mon cas?

Comment construire une URL correcte? Dois-je écrire une nouvelle extension HTMLHelper?

acclamations


0 commentaires

5 Réponses :


3
votes

Essayez: xxx

à l'aide de RobleLink au lieu de ActionLink Vous permet de spécifier l'itinéraire que vous souhaitez utiliser, ce qui est dans ce cas la cartographie de la route MVC par défaut par opposition à la personnalisation que vous avez ajouté.


2 commentaires

Salut merci. Je sais que Rougelink fonctionne, mais ce n'est que ce petit inconvénient peu! Toutes les chaînes magiques. Pourquoi ne fonctionne pas ActionLink.


Il ne contient qu'une autre chaîne que l'action d'action et votre question initiale était "Comment construire une URL correcte?". La raison pour laquelle cela est nécessaire est que votre WebformRouteHandler fournit une correspondance de route «valide» et, comme il est ajouté avant votre itinéraire par défaut dans le routable, il est renvoyé en premier. Mais de toute façon, j'ai ajouté une autre réponse qui pourrait être plus à votre goût.



7
votes

Une autre option serait d'ajouter une contrainte personnalisée à votre webformRoute (s). Par exemple, vous pouvez créer une implémentation d'IROUTECONTAINTAINT pour faire correspondre la routencedrection.IndicRequest, puis l'utiliser pour vous assurer que l'itinéraire est ignoré par des itinéraires générés par le serveur (tels que ActionLink), mais toujours utilisé par les demandes générées par le client. Quelque chose comme: xxx

puis ajoutez la contrainte à votre itinéraire: xxx

Bien sûr, vous préférez ajouter votre propre style de contrainte , celui-ci est assez limité sur l'itinéraire qui l'applique, mais ce n'est qu'un exemple d'une façon dont vous pourriez résoudre le problème.


2 commentaires

Merci, j'ai utilisé cette réponse pour réparer une autre question de mienne.


Super! exactement ce que je cherchais!



2
votes

Aussi: Assurez-vous que votre route par défaut est la dernière entrée de la table de routage. C'est un autre moyen facile de liquider avec le type de lien d'action HTML que vous obtenez.


1 commentaires

La question d'une telle longue depuis longtemps obtient toujours des réponses :-) Si vous regardez le code que j'ai joint, c'est la dernière entrée de la table itinéraire. MVC.net est devenu grand chemin, peut-être que tout a changé, je n'ai aucune idée!



1
votes

J'ai expérimenté la même chose où les itinéraires ont fonctionné correctement "entrant", mais html.actionLink () choisissait le mauvais itinéraire. J'ai travaillé autour de cela en ajoutant une contrainte d'itinéraire afin que le contrôleur doit être vide: xxx

puisque la valeur de la route "contrôleur" est limitée à rien, un appel à ActionLink () finit par ignorer l'itinéraire. J'espère que cela aide quelqu'un!


0 commentaires

2
votes

forcer la route par défaut ne doit avoir aucun contrôleur: xxx


0 commentaires