在ASP.NET MVC Html.ActionLink中包含锚标记

时间:2008-11-08 10:10:20

标签: asp.net-mvc

在ASP.NET MVC中,我正在尝试创建一个包含锚标记的链接(即,将用户引导到页面以及页面的特定部分)。

我尝试创建的网址应如下所示:

<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是子类别的ID,即child.ID。

我该怎么做?

7 个答案:

答案 0 :(得分:273)

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) %>

答案 1 :(得分:96)

我可能会手动构建链接,如下所示:

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

答案 2 :(得分:14)

我不记得在哪个版本的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)

来自this answer的Ed Blackburns反模式论证甚至都不能与之竞争。

答案 3 :(得分:9)

我就是这样做的:

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

答案 4 :(得分:1)

这是现实生活中的例子

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

答案 5 :(得分:0)

如果您将ActionFilter应用于子类别操作方法,只要您始终要将用户重定向到同一个书签,我的解决方案就会有效:

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

它修改HTML缓冲区并输出一小段javascript来指示浏览器附加书签。

您可以修改javascript以手动滚动,而不是使用URL中的书签!

希望有所帮助:)

答案 6 :(得分:0)

我做到了,它适用于重定向到其他视图 我想如果在它工作之后添加#sectionLink

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