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.