这是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%>
剥离了。我无法在控件上看到一个明显的属性,表明可以覆盖它。
正如现在删除的评论中指出的那样,我还可以在元素之间添加
作为另一种解决方法......但如果合适,这将阻止它自动换行。
进一步调查(由@Andrei提示)显示......
<asp:Label>
会产生正确的输出<%#%>
块会产生正确的输出<%#%>
块之间添加硬文本会产生正确的输出(虽然我显然不需要额外的文本)<asp:Label>
替换<span>
会产生正确的输出但是有两个带有单个空格的块,它会失败(即之间没有空格)。
我也尝试删除AssociatedControlID
,但也失败了。
答案 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不会将两个数据绑定字符串之间的空间视为静态字符串,因此它不会将该空间放在带有静态字符串的数组中。在这两个数据绑定字符串之间添加任何字符串后,这些字符串将变为静态字符串,包括空格。
在此图像中,蓝色标记的文本是数据绑定字符串,它们之间的内容是静态字符串。
会发生这种情况