Вопрос по asp.net-mvc-4, asp.net-mvc-3, asp.net-mvc – Перенаправить на хеш из контроллера, используя «RedirectToAction»

82

Здравствуйте, я хочу вернуть якорь из 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>

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

Ваш Ответ

4   ответа
4

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

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

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

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

Документы Microsoft - ControllerBase

125

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

Вы гениальный приятель! Вот что я закончил: return new RedirectResult (Url.Action (& quot; Index & quot; new {PKMvrEmployeeId = MvrId}) + & quot; # region & quot;); hidden
В MVC 5 при использовании RedirectToAction кажется, что экранирует # до% 23. Никто не испытывает это?
Это самое чистое решение, которое я видел до сих пор. Спасибо гдорон
+1 за использование RedirectResult вместо вызова метода Redirect (..). В выпуске MVC и IIS6 вы можете столкнуться с исключениями, вызванными перенаправлением, потому что запрос, возможно, уже перенаправлен, или часть дочернего действия, или содержимое уже отправлено.
13

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

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

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

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

Похожие вопросы