Asp.net mvc 循环中的Html.ActionLink会导致<;a>;标签

Asp.net mvc 循环中的Html.ActionLink会导致<;a>;标签,asp.net-mvc,Asp.net Mvc,在razor视图中使用此源代码: @for( int x = 0; x < 100; x++) { <a href="action">link</a> } @for( int x = 0; x < 100; x++) { @Html.ActionLink("link", "action") } (int x=0;x

在razor视图中使用此源代码:

@for( int x = 0; x < 100; x++)
{
    <a href="action">link</a>
}
@for( int x = 0; x < 100; x++)
{
    @Html.ActionLink("link", "action")
}
(int x=0;x<100;x++)的 { } @对于(int x=0;x<100;x++) { @ActionLink(“link”,“action”) } 生成两个不同的html块:

第一个循环产生

...
第二个产生一条长链的
。。。
在第二种情况下,浏览器不会在链接之间使用任何间距,也不会允许文本在必要时换行,从而创建一条不可断开的长链接线。链接文本中没有空格这一事实起了作用。在我的应用程序中,我真的需要一个单字链接的长列表,它们必须正确包装

在这种情况下,使用
Html.ActionLink
的正确方法是什么

我找到了两个解决办法:

  • 包装在
  • 在调用
    Html.ActionLink
    之后使用
    。这将强制在生成的源代码中换行

  • 从语义的角度来看,您正在创建一组链接,这些链接形成某种导航。您应该在生成的HTML中表达这种语义,因此从语义的角度来看,您所谓的使用
  • 元素的方法是“正确的”方法

    在HTML5中,我们有一个标签来表示在您的页面上有一堆链接,这些链接构成了某种导航:

    <nav>
      <ul>
        @for( int x = 0; x < 100; x++)
        {
          @Html.ActionLink("link", "action")
        }
      </ul>
    </nav>
    
    
    
      @对于(int x=0;x<100;x++) { @ActionLink(“link”,“action”) }
    如果使用的是(x)HTML 4,则可以考虑使用元素。

    最后一点:不要试图用HTML代码表达某种表示。HTML链接的包装是一种表示方式。如果使用语义标记,也可以修复表示,但这不是使用语义标记的原因


    链接中演示了如何在IE6中使用HTML 5标记。

    这将解决此问题:

    @for( int x = 0; x < 100; x++)
    {
         @Html.ActionLink("link", "action")
         @:&nbsp;
    }
    
    (int x=0;x<100;x++)的 { @ActionLink(“link”,“action”) @: }
    我同意你的看法,语义版本“更好”。我说过
  • 是一种变通方法,因为我不是为了添加scemantic而把它放在这里的。我在那里添加了它来修正行为。用
    包装它也是一种解决方法。最后,必须使用“技巧”来修复这个Html.ActionLink()行为。这是一件好事,其中一个“技巧”为结果提供了语义。
    <nav>
      <ul>
        @for( int x = 0; x < 100; x++)
        {
          @Html.ActionLink("link", "action")
        }
      </ul>
    </nav>
    
    @for( int x = 0; x < 100; x++)
    {
         @Html.ActionLink("link", "action")
         @:&nbsp;
    }