Comment puis-je créer ce lien d'action?
-
02-07-2019 - |
Question
Je ne parviens pas à créer un ActionLink à l'aide de Preview 5. Tous les documents disponibles décrivent l'ancienne version générique.
Je construis des liens sur une liste de travaux sur la page / travaux. Chaque travail a un guide, et j'aimerais construire un lien vers / jobs / details / {guid} pour pouvoir afficher les détails du travail. Mon contrôleur de travaux dispose d'un contrôleur d'index et d'un contrôleur de détails. Le contrôleur Details prend un guide. J'ai essayé cela
<%= Html.ActionLink(job.Name, "Details", job.JobId); %>
Cependant, cela me donne l'URL "/ jobs / details". Qu'est-ce qui me manque ici?
Résolu, avec votre aide.
Route (ajoutée avant la route à tout faire):
routes.Add(new Route("Jobs/Details/{id}", new MvcRouteHandler())
{
Defaults = new RouteValueDictionary(new
{
controller = "Jobs",
action = "Details",
id = new Guid()
}
});
Lien d'action:
<%= Html.ActionLink(job.Name, "Details", new { id = job.JobId }) %>
Résultats dans l'ancre HTML:
Donc, ses itinéraires déroutants. J'ai déplacé la définition de mon itinéraire de travaux avant l'administrateur du site Web et cela fonctionne maintenant. De toute évidence, mes définitions de route SUCK. J'ai besoin de lire plus d'exemples.
Une note de côté, mes liens ne figuraient pas et les montres rapides ne fonctionnaient pas (je ne pouvais pas regarder rapidement une expression de type anonyme), ce qui rendait beaucoup plus difficile de comprendre ce qui se passait ici. Il s'est avéré que les liens d'action ne figuraient pas à cause d'une faute de frappe très mineure:
<% Html.ActionLink(job.Name, "Details", new { id = job.JobId })%>
Cela va me chercher à nouveau.
La solution
Donnez à ceci un coup de feu:
<%= Html.ActionLink(job.Name, "Details", new { guid = job.JobId}); %>
Où & guid; guid " est le nom actuel du paramètre dans votre itinéraire. Ceci indique au moteur de routage que vous souhaitez placer la valeur de la propriété job.JobId dans le paramètre guid de la définition d'itinéraire.
Autres conseils
Avez-vous défini un itinéraire pour gérer cela dans votre fichier Global.asax.cs? La route par défaut est {controller} / {action} / {id}. Vous passez "JobID", que le cadre ne mappera pas à & id; id " automatiquement Vous devez soit changer ceci en job.id, soit définir un itinéraire pour gérer ce cas explicitement.