Включение тега привязки в ASP.NET MVC Html.ActionLink

В 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. Слово "section" - это просто соглашение, которое я использую, чтобы разбить разделы страницы, а 12 - это идентификатор подкатегории, то есть child.ID.

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

Ответ 1

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

<a href="<%=Url.Action("Subcategory", "Category", new { categoryID = parent.ID }) %>#section12">link text</a>

Ответ 2

Есть перегрузки ActionLink, которые принимают параметр фрагмент. Передача "section12", так как ваш фрагмент получит ваше поведение.

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

<%= Html.ActionLink("Link Text", "Action", "Controller", null, null, "section12-the-anchor", new { categoryid = "blah"}, null) %>

Ответ 3

Я не помню, в какой версии 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)

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

Ответ 4

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

<a href="@Url.Action("Index","Home")#features">Features</a>

Ответ 5

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

@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")

И целевая страница имеет TABS

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

        <li class="active"><a href="#discount" role="tab" data-toggle="tab">Discount</a></li>
    </ul>

Ответ 6

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

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

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

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

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

Ответ 7

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

<a class="btn yellow" href="/users/Create/@Model.Id" target="_blank">
                                        Add As User
                                    </a>