Как использовать RedirectToAction для перенаправления на позицию на странице?

Я использую MVC4, С# и Visual Studio Ultimate 2013 в проекте.

Я перенаправляю пользователя на индексную страницу после отправки формы. Однако на этой веб-странице есть 2 вкладки, и я хочу перенаправить пользователя на вторую вкладку вместо первой.

У меня есть контроллер с именем Material с действием Index, которое отправляет пользователя в представление Index.

public ActionResult Index()
{
   return View();
} 

Этот вид состоит из двух частичных видов, _Materials и _Packages.

@{
    ViewBag.Title = "Index";
}
<div class="tabbable">
    <ul class="nav nav-tabs">
        <li class="active"><a href="#Materials" data-toggle="tab">Materials</a></li>
        <li><a href="#Packages" data-toggle="tab">Packages</a></li>
    </ul>
    <div class="tab-content">
        <div class="tab-pane active" id="Materials">
            @Html.Action("Materials", "Material")
        </div>
        <div class="tab-pane" id="Packages">
            @Html.Action("Packages", "Package")
        </div>
    </div>
</div>

После выполнения ряда действий в другом разделе приложения, я хочу перенаправить пользователя на страницу /Material, на вторую вкладку, но я понятия не имею, как это сделать!

В настоящее время я использую этот код, который всегда перенаправляет на первую вкладку:

return RedirectToAction("Index", "Material");

Как я могу решить мою проблему?


person Flame_Phoenix    schedule 03.11.2014    source источник
comment
Взгляните на stackoverflow.com /questions/6985068/how-can-i-redirect-to-a-url вам также потребуется добавить хеш в конец URL, например. www.foobar.com/fizz#Пакеты   -  person Andre Dublin    schedule 03.11.2014
comment
Как добавить символ # в URL? Кажется, он не экранирован должным образом: S   -  person Flame_Phoenix    schedule 03.11.2014
comment
Кроме того, я не вижу, как это решает мою проблему =(   -  person Flame_Phoenix    schedule 03.11.2014


Ответы (3)


Вы не можете использовать что-то вроде RedirectToAction, потому что у него нет возможности добавлять фрагмент URL. Что вы можете сделать, так это использовать что-то вроде Redirect, которое просто принимает строку URL-адреса, а затем использовать помощник URL-адреса, чтобы по-прежнему динамически генерировать URL-адрес действия для вас:

return Redirect(Url.Action("Index", "Material") + "#Package");

Другими словами, Url.Action сгенерирует для вас основной URL-адрес и вернет его в виде строки. Затем вы можете добавить фрагмент к этой строке перед окончательным перенаправлением.

person Chris Pratt    schedule 03.11.2014
comment
Я использовал тот же метод, но после прихода к #myDivId он снова растет. - person Zeeshan Ahmad Khalil; 05.05.2020

Вы захотите использовать

Метод перенаправления

Redirect("www.sitename.com/material/index#Package");

or

string fragment = "Package";
Redirect("www.sitename.com/material/index#" + fragment);

#Package — это то, что называется идентификатором фрагмента, который сфокусирует ваш браузер на части страницы с идентификатором пакета.

person Andre Dublin    schedule 03.11.2014

Вы можете просто написать вызов Ajax для передачи контроллеру, а в случае success добавить #tab к параметру url. например, используйте это:

person Amirhossein Mehrvarzi    schedule 03.11.2014