Reindirizza a un hash dal controller utilizzando "RedirectToAction"


87

Ciao, voglio restituire un'ancora da Mvc Controller

Nome controller = DefaultController;

public ActionResult MyAction(int id)
{
        return RedirectToAction("Index", "region")
}

In modo che l'URL quando viene indirizzato all'indice sia

http://localhost/Default/#region

Così che

<a href=#region>the content should be focus here</a>

Non ti chiedo se puoi farlo in questo modo: come posso aggiungere un anchor tag al mio URL?



Risposte:


133

Ho trovato questo modo:

public ActionResult MyAction(int id)
{
    return new RedirectResult(Url.Action("Index") + "#region");
}

Puoi anche usare questo modo dettagliato:

var url = UrlHelper.GenerateUrl(
    null,
    "Index",
    "DefaultController",
    null,
    null,
    "region",
    null,
    null,
    Url.RequestContext,
    false
);
return Redirect(url);

http://msdn.microsoft.com/en-us/library/ee703653.aspx


1
Sei un geniale compagno! Ecco cosa ho finito di fare: return new RedirectResult (Url.Action ("Index", new {PKMvrEmployeeId = MvrId}) + "#region");
nascosto

1
+1 per l'utilizzo di RedirectResult invece di chiamare il metodo Redirect (..). In MVC in fase di rilascio e IIS6 è possibile riscontrare eccezioni causate dal reindirizzamento perché una richiesta è forse già reindirizzata, o parte di un'azione figlio o il contenuto è già stato inviato.
Jaans

2
In MVC 5, quando si utilizza RedirectToAction, sembra che l'escape # a% 23. Nessun altro lo sta vivendo?
jakejgordon

Per me, sta risalendo di nuovo quando uso lo stesso metodo.
Zeeshan Ahmad Khalil

14

Ottima risposta gdoron. Ecco un altro modo che uso (solo per aggiungere alle soluzioni disponibili qui).

return Redirect(String.Format("{0}#{1}", Url.RouteUrl(new { controller = "MyController", action = "Index" }), "anchor_hash");

Ovviamente, con la risposta di gdoron questo potrebbe essere reso più pulito con quanto segue in questo semplice caso;

return new RedirectResult(Url.Action("Index") + "#anchor_hash");

La prima opzione funziona bene se la tua azione è in un controller diverso.
Chad Hedgcock

9

Un modo semplice in dot net core

public IActionResult MyAction(int id)
{
    return RedirectToAction("Index", "default", "region");
}

I rendimenti di cui sopra / default / index # region . Il terzo parametro è il frammento che aggiunge dopo un #.

Microsoft docs - ControllerBase


4

Per espandere la risposta di Squall: l'uso dell'interpolazione di stringhe rende il codice più pulito. Funziona anche per azioni su controller diversi.

return Redirect($"{Url.RouteUrl(new { controller = "MyController", action = "Index" })}#anchor");
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.