循环中的Html.ActionLink导致<a> tags</a>的牢不可破的链

时间:2011-11-24 05:17:29

标签: asp.net-mvc

在剃须刀视图中使用此源代码:

@for( int x = 0; x < 100; x++)
{
    <a href="action">link</a>
}
@for( int x = 0; x < 100; x++)
{
    @Html.ActionLink("link", "action")
}

生成两个不同的html块:

第一个循环生成<a>标记,每个标记之间有换行符:

<a href="action">link</a>
<a href="action">link</a>
<a href="action">link</a>
<a href="action">link</a>
<a href="action">link</a>
<a href="action">link</a>
<a href="action">link</a>
<a href="action">link</a>
<a href="action">link</a>
...

第二个产生一个<a>标签的长链:

<a href="action">link</a><a href="action">link</a><a href="action">link</a><a href="action">link</a><a href="action">link</a><a href="action">link</a><a href="action">link</a>...

在第二种情况下,浏览器不会在链接之间使用任何间距,并且如果需要,将不允许文本换行创建一个长的不可断行链接。链接文本中没有空格的事实会产生影响。在我的应用程序中,我真的需要一长串的单字链接,他们必须正确包装。

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

我找到了两个解决方法:

  1. <a>包裹在<li>
  2. <text></text>来电后使用Html.ActionLink。这会强制生成源代码中的换行符。

2 个答案:

答案 0 :(得分:1)

这应该可以解决这个问题:

@for( int x = 0; x < 100; x++)
{
     @Html.ActionLink("link", "action")
     @:&nbsp;
}

答案 1 :(得分:0)

从语义的角度来看,你正在创建一堆链接,形成某种导航。你应该在生成的HTML中表达这种语义,所以你所谓的解决方法是使用&lt; li&gt;从语义的角度来看,元素是“正确的”方法!

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

<nav>
  <ul>
    @for( int x = 0; x < 100; x++)
    {
      @Html.ActionLink("link", "action")
    }
  </ul>
</nav>

如果您使用的是(X)HTML 4,则可以考虑使用&lt; div class =“nav”&gt;而不是元素。

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

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

相关问题