Redirecione para um hash do controlador usando “RedirectToAction”

87

Olá, quero devolver uma âncora do controlador Mvc

Nome do controlador = DefaultController;

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

Para que o url quando direcionado ao índice seja

http://localhost/Default/#region

De modo a

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

Não estou perguntando se você pode fazer assim: Como posso adicionar uma tag âncora ao meu URL?

escondido
fonte

Respostas:

133

Eu encontrei desta forma:

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

Você também pode usar esta forma detalhada:

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

gdoron está apoiando Monica
fonte
1
Você é um companheiro genial! Aqui está o que acabei de fazer: return new RedirectResult (Url.Action ("Index", new {PKMvrEmployeeId = MvrId}) + "#region");
oculto
1
1 para usar RedirectResult em vez de chamar o método Redirect (..). No MVC em lançamento e no IIS6, você pode acabar com exceções causadas pelo redirecionamento porque uma solicitação talvez já tenha sido redirecionada, ou parte de uma ação secundária, ou o conteúdo já tenha sido enviado.
Jaans
2
No MVC 5, ao usar RedirectToAction, parece escapar de # para um% 23. Ninguém mais está experimentando isso?
jakejgordon
Para mim, ele vai subir novamente quando eu uso o mesmo método.
Zeeshan Ahmad Khalil
14

Ótima resposta, gdoron. Aqui está outra forma que utilizo (apenas para aumentar as soluções disponíveis aqui).

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

Obviamente, com a resposta de gdoron, isso poderia ser feito um limpador com o seguinte, neste caso simples;

return new RedirectResult(Url.Action("Index") + "#anchor_hash");
Squall
fonte
A primeira opção funciona bem se sua ação for em um controlador diferente.
Chad Hedgcock
9

Uma forma simples de dot net core

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

Os rendimentos acima / default / index # region . O terceiro parâmetro é fragmento que ele adiciona após um #.

Documentos da Microsoft - ControllerBase

Dermot
fonte
4

Para expandir a resposta de Squall: Usar interpolação de strings torna o código mais limpo. Também funciona para ações em diferentes controladores.

return Redirect($"{Url.RouteUrl(new { controller = "MyController", action = "Index" })}#anchor");
Jon T UK
fonte