在<text>之后,在cshtml中,单个<br/>不给出换行符

时间:2016-02-16 08:05:26

标签: c# asp.net-mvc razor

虽然略有不同,这个问题does not seem to be new,但链接中给出的唯一答案却相当简短而不是解释。

我正在创建一个ASP.NET MVC Web App,在我的cshtml文件中,我有以下几行:

<text>@Html.ActionLink("Create New Employee", "Create")</text>
<br />
something else below

虽然我已经设置换行符,但结果是相同的,如果我不放任何<br />,两者都会被渲染成以下结果:

enter image description here

请注意,“Mark”直接放在“Create New Employee”之后。结果与我只提出

时的结果相同
<text>@Html.ActionLink("Create New Employee", "Create")</text>
no break here
something else below

没有<br/>

只有当我放置双<br />时,才会使用额外的换行符进行渲染:

<text>@Html.ActionLink("Create New Employee", "Create")</text>
<br />
<br />
something else

导致:

enter image description here

现在,我对网络应用程序制作并不陌生,因此可能会有一些<br/>标签的特殊属性,我不知道。当我在<br/><h4>之后使用<table>时似乎没问题。但是,为什么当我在<text>之前放置<ul>时,它无法按照我的预期渲染?这个常见问题是放两个<br/>而不是一个吗?

1 个答案:

答案 0 :(得分:2)

代码中的something else below似乎代表了无序列表(ul)和一些列表项(li),所以我猜你生成的HTML看起来像这样:

<a href="#">Create New Employee</a>
<ul>
    <li><a href="#">Mark</a></li>
    <li><a href="#">Luke</a></li>
</ul>

让我们调查一下发生了什么。 a是内联元素。如this article

中所述
  

内联元素不会在新行上启动,只会占用   必要的宽度。

另一方面,

ul元素是块级元素,并且如同一篇文章中所述

  

块级元素始终在新行上开始并占用   全宽可用(向左和向右延伸直至它   能)。

因此,根据上述说明,ul始终从新行开始。如果您在br之后未添加a,则ul会自动移至下一行。如果您添加br,则无需将ul移至新行,因为它已经存在。

总体而言 - ul之前的换行似乎被忽略了,因为ul是块级元素,它显示在新行上。

我创建了带有可见元素边框的jsFiddle,因此可以更清楚地看到发生了什么。