首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET标签移除空间

问ASP.NET标签移除空间
EN

Stack Overflow用户
提问于 2016-05-03 09:09:43
回答 1查看 788关注 0票数 1

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

我有一个<asp:Repeater>,在<ItemTemplate>中有以下几行.

代码语言:javascript
复制
<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>

这将导致将姓氏和姓氏呈现为,而不使用,在.

代码语言:javascript
复制
<td>JoeBlogs</td>

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

代码语言:javascript
复制
<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,但也失败了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-03 10:42:33

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

我这个案子你可以写点什么

代码语言:javascript
复制
<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上

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37000048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档