web-dev-qa-db-ja.com

「RedirectToAction」を使用して、コントローラーからハッシュにリダイレクトします

こんにちはMvc Controllerからアンカーを返したい

コントローラー名= DefaultController;

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

インデックスに向けられたときのURLは

http://localhost/Default/#region

そのため

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

次のようにできるかどうかは尋ねません: RLにアンカータグを追加するにはどうすればよいですか?

82
hidden

私はこの方法を見つけました:

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

この詳細な方法も使用できます。

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

127
gdoron

素晴らしい答えgdoron。私が使用する別の方法を次に示します(ここで利用可能なソリューションに追加するためだけです)。

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

明らかに、gdoronの答えを使えば、この単純なケースでは次のようにクリーナーになります。

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

ドットネットコアの簡単な方法

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

上記は/ default/index#regionを生成します。 3番目のパラメーターはfragmentで、#の後に追加します。

Microsoft docs-ControllerBase

4
Dermot

Squallの答えを拡張するには:文字列補間を使用すると、コードが簡潔になります。また、さまざまなコントローラー上のアクションに対しても機能します。

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