ASP.NET标签删除空格

时间:2016-05-03 09:09:44

标签: asp.net

这是ASP.NET 4.0中的错误,还是我遗漏了一些明显的东西......?

我在<asp:Repeater> ...

中有以下几行<ItemTemplate>
<td><asp:Checkbox runat="server" ID="chkInclude" Checked="true" /></td>
<td>
  <asp:Label runat="server" AssociatedControlID="chkInclude">
    <%#Container.DataItem.FirstName%> <%#Container.DataItem.Surname%></asp:Label>
</td>

这导致firstname和surname呈现为而没有之间的空格......

<td>JoeBlogs</td>

有一个简单的解决方案,即连接字符串......

<asp:Label runat="server" AssociatedControlID="chkInclude">
  <%#Container.DataItem.FirstName & " " & Container.DataItem.Surname%></asp:Label>

...但我想知道为什么在使用单独的<asp:Label>元素时,空间被<%#Container%>剥离了。我无法在控件上看到一个明显的属性,表明可以覆盖它。

正如现在删除的评论中指出的那样,我还可以在元素之间添加&nbsp;作为另一种解决方法......但如果合适,这将阻止它自动换行。

进一步调查(由@Andrei提示)显示......

  • 删除<asp:Label>会产生正确的输出
  • 用硬文本替换<%#%>块会产生正确的输出
  • <%#%>块之间添加硬文本会产生正确的输出(虽然我显然不需要额外的文本)
  • <asp:Label>替换<span>会产生正确的输出

但是有两个带有单个空格的块,它会失败(即之间没有空格)。

我也尝试删除AssociatedControlID,但也失败了。

1 个答案:

答案 0 :(得分:2)

每次我想看看ASP .Net如何从aspx标记生成代码时,我会故意创建编译错误,然后检查显示完整编译源

在这种情况下,您可以编写类似

的内容
<asp:Label runat="server" AssociatedControlID="chkInclude">
    <%#Container.DataItem.FirstName / 2%> <%#Container.DataItem.Surname%></asp:Label>

然后您将看到ASP .Net如何解析<asp:Label runat="server" AssociatedControlID="chkInclude"></asp:Label>之间的内容。

ASP .Net认为这里有两种类型的令牌:静态字符串数据绑定字符串。它将它们存储在两个不同的数组中,在这种情况下,它构建标签控件的Text属性,或者在Render方法中呈现html内容。您遇到的问题是ASP .Net不会将两个数据绑定字符串之间的空间视为静态字符串,因此它不会将该空间放在带有静态字符串的数组中。在这两个数据绑定字符串之间添加任何字符串后,这些字符串将变为静态字符串,包括空格。

enter image description here

在此图像中,蓝色标记的文本是数据绑定字符串,它们之间的内容是静态字符串

DataBoundLiteralControl

会发生这种情况