在剃须刀视图中使用此源代码:
@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
的正确方法是什么?
我找到了两个解决方法:
<a>
包裹在<li>
<text></text>
来电后使用Html.ActionLink
。这会强制生成源代码中的换行符。答案 0 :(得分:1)
这应该可以解决这个问题:
@for( int x = 0; x < 100; x++)
{
@Html.ActionLink("link", "action")
@:
}
答案 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标记。