Перенаправлення на хеш з контролера за допомогою “RedirectToAction”


87

Привіт, я хочу повернути якір від 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-адреси?



1
Можливий дублікат ASP.Net MVC RedirectToAction з якорем
GSerg

Відповіді:


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


1
Ви геніальний товариш! Ось що я закінчив робити: повернути новий RedirectResult (Url.Action ("Index", new {PKMvrEfficieeId = MvrId}) + "#region");
приховано

1
+1 за використання RedirectResult замість виклику методу Redirect (..). У MVC під випуском та IIS6 ви можете закінчити з винятками, спричиненими перенаправленням, оскільки запит, можливо, вже перенаправлено, або частина дочірньої дії, або вміст уже надіслано.
Jaans

2
У MVC 5, під час використання RedirectToAction, здається, що він уникає # до% 23. Хіба ще ніхто цього не переживає?
jakejgordon

Для мене це знову повертається назад, коли я використовую той самий метод.
Зеешан Ахмад Халіл

14

Чудова відповідь 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");

Перший варіант добре працює, якщо ваша дія відбувається в іншому контролері.
Чад Хеджкок,

9

Простий спосіб в точковому мережевому ядрі

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

Вищевказаний дохід / регіон за замовчуванням / індекс # . 3-й параметр - це фрагмент, який він додає після #.

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


4

Розгорнути відповідь Squall: Використання інтерполяції рядків робить чистіший код. Він також працює для дій на різних контролерах.

return Redirect($"{Url.RouteUrl(new { controller = "MyController", action = "Index" })}#anchor");
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.