Перенаправление на хэш с контроллера с помощью RedirectToAction

87

Здравствуйте, я хочу вернуть привязку из контроллера MVC

Имя контроллера = 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>

Я не спрашиваю, можете ли вы сделать это вот так: как мне добавить тег привязки к моему URL?

скрытый
источник

Ответы:

133

Я нашел такой способ:

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

gdoron поддерживает Монику
источник
1
Вы гениальный друг! Вот что я закончил: return new RedirectResult (Url.Action ("Index", new {PKMvrEmployeeId = MvrId}) + "#region");
скрыто
1
+1 за использование RedirectResult вместо вызова метода Redirect (..). В выпуске MVC и IIS6 вы можете получить исключения, вызванные перенаправлением, потому что запрос, возможно, уже перенаправлен, или является частью дочернего действия, или контент уже отправлен.
Jaans
2
В MVC 5 при использовании RedirectToAction похоже, что символ # переходит в% 23. Больше никто этого не испытывает?
jakejgordon
Для меня это снова возвращается, когда я использую тот же метод.
Зишан Ахмад Халил
14

Отличный ответ гдорон. Вот еще один способ, который я использую (просто чтобы добавить к имеющимся здесь решениям).

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

Очевидно, что с ответом gdoron это можно было бы сделать более чистым в этом простом случае:

return new RedirectResult(Url.Action("Index") + "#anchor_hash");
Шквал
источник
Первый вариант хорошо работает, если ваше действие находится в другом контроллере.
Чад Хеджкок
9

Простой способ в ядре dot net

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

Вышеуказанное дает / default / index # region . Третий параметр - это фрагмент, который добавляется после символа #.

Microsoft docs - ControllerBase

Дермот
источник
4

Чтобы развернуть ответ Скволла: использование строковой интерполяции делает код более чистым. Это также работает для действий на разных контроллерах.

return Redirect($"{Url.RouteUrl(new { controller = "MyController", action = "Index" })}#anchor");
Джон Т Великобритания
источник