2010-11-01 53 views
0

我有一段代码在页面加载时会填充以下部分或全部标签。它应该每行有两个标签(每个xData标签后需要换行)。我遇到的问题是,由于具有数据的标签数量设置为可在页面加载时发生变化,所以当不是所有标签都可见时,br /标签会导致间距问题。仅在标签可见时才在标签后添加<br />。 C#

<div id="Status"> 
    <asp:Label ID="1" runat="server" Text="1:" Width="125px" Visible="false" /> 
    <asp:Label ID="1Data" runat="server" Text="" Visible="false" /> 
    <asp:Label ID="2" runat="server" Text="2:" Width="125px" Visible="false" /> 
    <asp:Label ID="2Data" runat="server" Text="" Visible="false" /> 
    <asp:Label ID="3" runat="server" Text="3:" Width="125px" Visible="false" /> 
    <asp:Label ID="3Data" runat="server" Text="" Visible="false" /> 
</div> 

我希望能够在代码中的每个“外部数据”标签后添加换行符后面当标签填充设置为可见。

我曾尝试将"\n"添加到标签文本和\或Environment.NewLine,但没有运气。

感谢所有帮助

+0

为什么他们都需要有单独的标签?为什么你不能在'StringBuilder'中串接字符串并通过' 2010-11-01 15:08:12

+0

我想他们不一定非要这么做,我只是试图不要过多地改变它,因为我只是加入了这个代码,并且不想做重大更改。 – InsertOldUserIDHere 2010-11-01 15:57:27

回答

2

最简单的方法...

<div id="Status"> 
    <div id="Status1" runat="server" Visible="false"> 
     <asp:Label ID="1" runat="server" Text="1:" Width="125px" /> 
     <asp:Label ID="1Data" runat="server" Text="" /> 
    </div> 
    <div id="Status2" runat="server" Visible="false"> 
     <asp:Label ID="2" runat="server" Text="2:" Width="125px" /> 
     <asp:Label ID="2Data" runat="server" Text="" /> 
    </div> 
    <div id="Status3" runat="server" Visible="false"> 
     <asp:Label ID="3" runat="server" Text="2:" Width="125px" /> 
     <asp:Label ID="3Data" runat="server" Text="" /> 
    </div> 
</div> 

正确的方法...

<div id="Status"> 
    <asp:Label CssClass="statusLabel" ID="1" runat="server" Text="1:" Width="125px" Visible="false" /> 
    <asp:Label ID="1Data" runat="server" Text="" Visible="false" /> 
    <asp:Label CssClass="statusLabel" ID="2" runat="server" Text="2:" Width="125px" Visible="false" /> 
    <asp:Label ID="2Data" runat="server" Text="" Visible="false" /> 
    <asp:Label CssClass="statusLabel" ID="3" runat="server" Text="3:" Width="125px" Visible="false" /> 
    <asp:Label ID="3Data" runat="server" Text="" Visible="false" /> 
</div> 

/* CSS */ 
#Status span { 
    display: block; 
} 
#Status .statusLabel { 
    clear: both; 
    float: left; 
} 
+0

谢谢乔希! @Brianary提出了关于在表现层中的评论,这让我想到了不用文字。这让我走向了我想去的地方。 – InsertOldUserIDHere 2010-11-01 16:18:25

0

尝试包裹而不是把一个<br />末一个<div>周围的标签。根据我的经验,空的<div>不会创建空的空间。

1

我想你可以用几种不同的方法做到这一点。

@Greg在他对你的帖子的评论中指出了一个选择。

另一种可能的选择是将每个标签封装在其自己的<div>标签中,并使用runat="server",然后在需要时使这些<div>可见。由于<div>

+0

在asp.net中,服务器端div是一个Panel控件。 – chris 2010-11-01 15:14:20

1

asp:Label解析为html中的跨度,因此<div>应创建自己的换行符。如果你想让每一个都有自己的行,添加CSS样式“display:block”。通常,您可以通过设置CssClass并在该类中放置display:block来执行此操作。

+0

他每行需要两个标签。 – 2010-11-01 15:52:39

1

如果您想要这种方式,您需要对每个BR标记使用文字控制,以便您可以将其设置为可见/不可见相应Label控件的可见性。

+0

谢谢你帮我把头伸出沙滩。我被困在想如何做到这一点是我有的控制,甚至没有考虑使用另一个。如果不是@brianary指出这是表示层,我会用这个(它确实很好) – InsertOldUserIDHere 2010-11-01 16:14:35

1

为什么不只是将一个带有display: block规则的CSS类添加到这些标签?

毕竟这是表现性的。

+0

这不够好,因为他每行都需要两个标签。 – 2010-11-01 15:40:52

+0

谢谢你指出@布里亚里,让我重新思考我是如何接近这个并且像@Josh Stodola一样提出来的。 – InsertOldUserIDHere 2010-11-01 16:15:56