2008-09-29 3 views
1

Je rencontre des problèmes lors de la création d'un lien ActionLink à l'aide de Preview 5. Tous les documents que je peux trouver décrivent l'ancienne version générique.Comment puis-je créer ce lien d'action?

Je construis des liens sur une liste de travaux sur la page/les travaux. Chaque travail a un guid, et je voudrais construire un lien vers/jobs/details/{guid} afin que je puisse montrer des détails sur le travail. Mon contrôleur d'emplois a un contrôleur d'index et un contrôleur de détails. Le contrôleur Details prend un guid. J'ai essayé ceci

<%= Html.ActionLink(job.Name, "Details", job.JobId); %> 

Cependant, cela me donne l'URL "/ jobs/details". Qu'est-ce que j'oublie ici?


Résolu, avec votre aide.

Route (ajouté avant le fourre-tout trajet):

routes.Add(new Route("Jobs/Details/{id}", new MvcRouteHandler()) 
{ 
Defaults = new RouteValueDictionary(new 
    { 
    controller = "Jobs", 
    action = "Details", 
    id = new Guid() 
    } 
}); 

lien Action:

<%= Html.ActionLink(job.Name, "Details", new { id = job.JobId }) %> 

Résultats dans l'ancre html:

http://localhost:3570/WebsiteAdministration/Details?id=2db8cee5-3c56-4861-aae9-a34546ee2113

Donc, ses routes confuses. J'ai déplacé ma définition d'itinéraire de travaux avant l'admin de site Web et cela fonctionne maintenant. Évidemment, mes définitions de route SUCK. J'ai besoin de lire plus d'exemples.

Une note de côté, mes liens ne s'affichaient pas, et les quickwatches ne fonctionnaient pas (impossible d'observer une expression avec un 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 s'affichaient pas à cause d'une faute de frappe très mineure:

<% Html.ActionLink(job.Name, "Details", new { id = job.JobId })%> 

Ça va me ramener.

Répondre

3

Donnez ce un coup:

<%= Html.ActionLink(job.Name, "Details", new { guid = job.JobId}); %> 

Où « guid » est le nom réel du paramètre dans votre itinéraire. Cela 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 de la route.

1

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 framework ne mappera pas automatiquement à "id". Vous devez soit changer cela pour être job.id ou définir une route pour gérer ce cas explicitement.

+0

Aah, "magie". Je vais essayer dans la matinée. – Will

+0

Les routes ont joué un rôle. Merci de votre aide. – Will

Questions connexes