这是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>这将导致将姓氏和姓氏呈现为,而不使用,在.
<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,但也失败了。
发布于 2016-05-03 10:42:33
每次我想了解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认为这里有两种类型的令牌:静态字符串和数据绑定字符串。它将它们存储在两个不同的数组中,在这种情况下,它构建label控件的Text属性,或者在Render方法中呈现html内容。问题是ASP .Net没有将两个数据绑定字符串之间的空间视为静态字符串,所以它不会将该空间与静态字符串放在数组中。一旦在这两个数据绑定字符串之间添加任何字符,这些字符串就会变成一个静态字符串,包括空格。

在这个图像中,蓝色标记的文本是数据绑定字符串,它们之间是一个静态字符串。
这种情况发生在DataBoundLiteralControl上
https://stackoverflow.com/questions/37000048
复制相似问题