Ответ 1
Я бы, вероятно, создал ссылку вручную, например:
<a href="<%=Url.Action("Subcategory", "Category", new { categoryID = parent.ID }) %>#section12">link text</a>
В 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.
Как я могу это сделать?
Я бы, вероятно, создал ссылку вручную, например:
<a href="<%=Url.Action("Subcategory", "Category", new { categoryID = parent.ID }) %>#section12">link text</a>
Есть перегрузки 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) %>
Я не помню, в какой версии 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)
Даже Эдвард Блэкбернс против спора из этого ответа может конкурировать с этим.
Я просто сделал это так:
<a href="@Url.Action("Index","Home")#features">Features</a>
Вот пример реальной жизни
@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>
Мое решение будет работать, если вы примените ActionFilter к методу действий подкатегории, если вы всегда хотите перенаправить пользователя на одну и ту же закладку:
http://spikehd.blogspot.com/2012/01/mvc3-redirect-action-to-html-bookmark.html
Он изменяет буфер HTML и выводит небольшой фрагмент javascript, чтобы указать браузеру добавить закладку.
Вы можете изменить javascript для ручного прокрутки, вместо того, чтобы использовать закладку в URL-адресе, конечно!
Надеюсь, это поможет:)
Я сделал это и работает для перенаправления на другое представление Я думаю, если вы добавите #sectionLink после того, как он будет работать
<a class="btn yellow" href="/users/Create/@Model.Id" target="_blank">
Add As User
</a>