2011-10-26 24 views
19

MVC 3.net Voglio aggiungere un'ancora alla fine di un url.Come posso aggiungere un tag di ancoraggio al mio URL?

Ho cercato di includere una stringa di query di ancoraggio, ma l'hash '#' è cambiato in% 23 o qualcosa di simile nell'URL.

C'è un modo per aggirare questo problema?

+1

http://stackoverflow.com/questions/10690466/redirect-to-a-hash-from-the-controller-using-redirecttoaction – hidden

risposta

36

C'è un sovraccarico del ActionLink di supporto che consente di specificare il frammento:

@Html.ActionLink(
    "Link Text",   // linkText 
    "Action",    // actionName 
    "Controller",   // controllerName 
    null,     // protocol 
    null,     // hostName 
    "fragment",   // fragment 
    new { id = "123" }, // routeValues 
    null     // htmlAttributes 
) 

produrrà (ipotizzando percorsi predefiniti):

<a href="/Controller/Action/123#fragment">Link Text</a> 

UPDATE:

e se si desidera eseguire questa operazione all'interno di un'azione del controller eseguendo un reindirizzamento, è possibile utilizzare il metodo GenerateUrl:

public ActionResult Index() 
{ 
    var url = UrlHelper.GenerateUrl(
     null, 
     "Action", 
     "Controller", 
     null, 
     null, 
     "fragment", 
     new RouteValueDictionary(new { id = "123" }), 
     Url.RouteCollection, 
     Url.RequestContext, 
     false 
    ); 
    return Redirect(url); 
} 
+0

Nizza, non sapevano di questo. Grazie! –

+0

grazie cara. in questo caso sto usando il reindirizzamento all'azione per generare un url da un controller, e ha solo 6 sovraccarichi che non includono il frammento. qualche soluzione a questo? – DevDave

+4

In questo caso è possibile utilizzare il metodo [UrlHelper.GenerateUrl] (http://msdn.microsoft.com/en-us/library/ee703653.aspx) all'interno del controller che consente di specificare un frammento e quindi reindirizzare a url risultante. Ho aggiornato il mio post per fornire un esempio. –

Problemi correlati