命名锚和MVC URL

命名锚用于生成网页文档中的特定位置的链接。除非您小心,否则您最终可能会在使用MVC LifkExtension eververs上工作时有点麻烦。

命名的锚点需要使用 名称 A. <a href> 元素。如果您查看包含具有注释文章的网站上任何页面的源代码,则可以看到“评论”部分在其中之一之前:

<a href="#"  名称 ="comments"></a>
<h2>Comments</h2>

你也可以看到(那里有很多评论)"bookmarked"拥有自己独特的锚点:

<a href="#"  名称 ="commentId1033"></a>
<div class="comment">
...      
<a href="#"  名称 ="commentId1034"></a>
<div class="comment">
...
<a href="#"  名称 ="commentId1035"></a>
<div class="comment">
...

要获得这些工作,以便浏览器将用户带到锚定义的文档中的位置,所以需要附加URL#<anchor-name>, where <anchor-name>对应链接中的名称属性。有效的例子将是:

http://www.lssc9d.icu/Article/129/Simple-task-Scheduling-using-Global.asax#commentId1031
http://www.lssc9d.icu/Article/46/CSharp-Regular-Expressions-Cheat-Sheet#comments

如果您尝试通过将项目的ID串联动态生成这些类型的URL,您可以最终找到结果的URL包含%23,您可以在其中期望散列或磅(#)符号。它得到了URLEncoded。并且链接不按预期工作。

这俩 ActionLink. forfelink. 扩展助手包含一个过载,它克服了这个问题,但只是看目前的过载选项列表并不一定会使这显而易见。一旦你明白了 官方HTML规范 是指#作为a之后的URL的一部分 分段 identifier,它应该变得更加明显,所需的过载是这个(for forforelink):

LiNKXTENSIONS RERELINK方法(HTMLHELPER,String,String,String,String,String,Object,Object)

第五个字符串论点需要"fragment"或#符号后的部分。

最新的评论面板(在我主页的右上角)使用此过载生成注释提供商名称背后的链接:

<%= Html.RouteLink(
  item.CommentName,                    // Link Text
  "Show",                              // Route Name
  null,                                // Protocol
  null,                                // Host Name
  "commentId" + item.CommentID,        // Fragment
  new {                                // Route Values
        controller = "Article", 
        action = "Show",
        id = item.Articles.ArticleID,
        title= item.Articles.Headline.ToCleanUrl()
      }, 
  null                                 // HTML Attributes
    ) %>