2009-11-24 2 views
0

Ma question initiale était un peu confus, alors laissez-moi modifier ce post pour être plus clair:Générer un ActionLink qui vous amène à un élément HTML avec un ID particulier

Comment puis-je générer un ActionLink qui ne utilise uniquement le moteur de routage, mais vous amène également à un élément html avec un ID particulier sur une page? Je veux générer quelque chose comme ceci:

<a href="/ControllerName/ActionName/#section2>Link</a> 

ou parfois même, mais avec un paramètre d'action de 15 par exemple:

<a href="/ControllerName/ActionName/15#section2>Link</a> 

où la vue desservie par le actionName a un élément avec l'id « section2 »:

<div id="section1"> 
    <h1>Section 1</h1> 
    ... 
</div> 
<div id="section2"> 
    <h1>Section 2</h1> 
    ... 
</div> 

je crois que je pourrais écrire une méthode d'assistance Html qui utilise Url.RouteUrl(), puis ajoutez la « #sectionId » mais est-ce le/la meilleure façon la plus simple de le faire? Dois-je créer une règle de routage pour cela? La route par défaut:

routes.MapRoute(
    "Default", 
    "{controller}/{action}/{id}", 
    new { controller = "Experiment", action = "Index", id = "" } 
); 

me permet d'ajouter manuellement « # section2 » à la fin de l'url dans mon navigateur et il me prend la section2 div. Il semble que plutôt que d'ajouter ou de modifier une route, j'ai simplement besoin d'ajouter "# section2" à l'URL ActionLink.

+0

Le titre devrait être « Générer ActionLink avec une partie URL Fragment » –

Répondre

1

Pour l'itinéraire suivant:

 routes.MapRoute(
      "Default", 
      "{controller}/{action}/{id}/{section}", 
      new { controller = "Home", action = "Index", id = "", section = "" } 
     ); 

vous feriez:

<%= Html.ActionLink("Link Text", "Index", new { section = "#sectionId" }) %> 
+0

Cela va me faire un lien vers l'action, passer dans l'ID en tant que paramètre, mais je veux aller un peu plus loin et ensuite faire défiler vers le bas à l'élément particulier avec l'id particulier (dis id = "sectionId") – sdr

+0

vous voulez dire une balise "ancre" alors !!! moi éditer. – Mark

2

Vous voulez changer/ajouter un itinéraire à suivre:

routes.MapRoute("MyRoute", "{controller}/{action}#{id}", /* some default here */); 

Puis le MVC Helper serait:

<%= Html.ActionLink("Link Text", "Index", new { id = "sectionId" }) %> 
1

Je pense que l'OP veut que l'ID soit l'ancre ref à la fin de l'URL, car il semble être une liste d'éléments et il veut que le navigateur fasse défiler jusqu'à l'élément. (Je suis juste guesing ici à cause de la « # » clause Petite modification au code de Mark.

routes.MapRoute(
    "Default", 
    "{controller}/{action}/#{sectionId}", 
    new { controller = "Home", action = "Index", sectionId = Model.SectionId });