Включение тега привязки в ASP.NET MVC Html.ActionLink - PullRequest
149 голосов
/ 08 ноября 2008

В ASP.NET MVC я пытаюсь создать ссылку, которая включает в себя тег привязки (то есть направление пользователя на страницу и определенный раздел страницы).

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

<a href="/category/subcategory/1#section12">Title for a section on the page</a>

Моя маршрутизация настроена со стандартом:

routes.MapRoute("Default", "{controller}/{action}/{categoryid}"); 

Синтаксис ссылки действия, который я использую:

<%foreach (Category parent in ViewData.Model) { %>
<h3><%=parent.Name %></h3>
<ul>
<%foreach (Category child in parent.SubCategories) { %>
    <li><%=Html.ActionLink<CategoryController>(x => x.Subcategory(parent.ID), child.Name) %></li>
<%} %>
</ul>
<%} %>

Мой метод контроллера следующий:

public ActionResult Subcategory(int categoryID)
{
   //return itemList

   return View(itemList);
}

Выше правильно возвращает URL следующим образом:

<a href="/category/subcategory/1">Title for a section on the page</a>

Я не могу понять, как добавить часть # section12 . Слово «раздел» - это просто соглашение, которое я использую для разбиения разделов страницы, а 12 - это идентификатор подкатегории, то есть child.ID.

Как я могу это сделать?

Ответы [ 7 ]

273 голосов
/ 09 ноября 2008

Существуют перегрузки ActionLink, которые принимают параметр фрагмент . Если вы передадите «section12» в качестве фрагмента, вы получите то поведение, которое вам нужно.

Например, вызов метода LinkExtensions.ActionLink (HtmlHelper, String, String, String, String, String, String, Object, Object) :

<%= Html.ActionLink("Link Text", "Action", "Controller", null, null, "section12-the-anchor", new { categoryid = "blah"}, null) %>
96 голосов
/ 08 ноября 2008

Я бы, вероятно, построил ссылку вручную, вот так:

<a href="<%=Url.Action("Subcategory", "Category", new { categoryID = parent.ID }) %>#section12">link text</a>
14 голосов
/ 28 сентября 2014

Я не помню, в какой версии ASP.NET MVC (я полагаю, ASP.NET MVC 3+) / Razor была добавлена ​​метка параметра или как она называется (параметр: x), но для меня это определенно правильный способ построить ссылку с якорем в ASP.NET MVC.

@Html.ActionLink("Some link text", "MyAction", "MyController", protocol: null, hostName: null, fragment: "MyAnchor", routeValues: null, htmlAttributes: null)

Даже аргумент антипаттерна Эд Блэкбернса из этот ответ не может с этим поспорить.

9 голосов
/ 18 июня 2016

Я просто сделал это так:

<a href="@Url.Action("Index","Home")#features">Features</a>
1 голос
/ 02 декабря 2014

Вот пример из реальной жизни

@Html.Grid(Model).Columns(columns =>
    {
           columns.Add()
                   .Encoded(false)
                   .Sanitized(false)
                   .SetWidth(10)
                   .Titled(string.Empty)
                   .RenderValueAs(x => @Html.ActionLink("Edit", "UserDetails", "Membership", null, null, "discount", new { @id = @x.Id }, new { @target = "_blank" }));

  }).WithPaging(200).EmptyText("There Are No Items To Display")

А на целевой странице есть вкладки

<ul id="myTab" class="nav nav-tabs" role="tablist">

        <li class="active"><a href="#discount" role="tab" data-toggle="tab">Discount</a></li>
    </ul>
0 голосов
/ 12 марта 2016

Я сделал это, и это работает для перенаправления на другой вид Я думаю, если вы добавите #sectionLink после того, как он будет работать

<a class="btn yellow" href="/users/Create/@Model.Id" target="_blank">
                                        Add As User
                                    </a>
0 голосов
/ 19 января 2012

Мое решение будет работать, если вы примените ActionFilter к методу действия Подкатегория, если вы всегда хотите перенаправить пользователя к одной и той же закладке:

http://spikehd.blogspot.com/2012/01/mvc3-redirect-action-to-html-bookmark.html

Он изменяет буфер HTML и выводит небольшой фрагмент JavaScript, чтобы дать браузеру команду добавить закладку.

Вы можете изменить javascript для ручной прокрутки, вместо использования закладки в URL, конечно!

Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...