2010-08-13 48 views
0

访问多个值,我有一些循环,并增加了一个新的面板控制另一个控制逻辑:从生成面板

for (int segmentIndex = 0; segmentIndex < segments.Length; ++segmentIndex) 
{ 
    holder.Controls.Add(new Panel() { Width = Unit.Percentage(segments[segmentIndex]/segmentsSum * 100), CssClass = String.Format("segment segment-{0}", segmentIndex) }); 
} 
container.Controls.Add(holder); 

这个伟大的工程,但也有我需要存储每个面板上的几个值在循环内。一旦控件在页面上呈现,我需要能够在c#和javascript中访问这些值。什么是实现这一目标的最佳方式?我之前在一些控件上使用了Tag属性,但Panel没有。

非常感谢

回答

0

将HiddenField添加到面板。它将以HTML形式呈现为<input type="hidden" />,因此它不可见,可用于您的服务器代码以及JavaScript。

LiteralControl innerContent = new LiteralControl("<p>Hello, World!</p>"); 
HiddenField hiddenContent = new HiddenField() { ID = "hiddenContent", Value = "My hidden content" }; 
p.Controls.Add(innerContent); 
p.Controls.Add(hiddenContent); 
+0

因为我有多个值,你会推荐多个HiddenFields或单个HiddenField与值连接? – 2010-08-13 19:43:58

+0

只要它完成了工作,它并不重要。 :-)如果你想访问JavaScript中的数据,也许创建多个隐藏域更容易。它还可以使您的代码更易于阅读和理解。 – 2010-08-13 21:46:20

1

这听起来像你需要添加小组内的标记,是正确的?如果是这样,您可以将控件添加到Panel控件的控件集合,例如Label或LiteralControl。

以下(非测试)的代码说明了这一点:

for (int segmentIndex = 0; segmentIndex < segments.Length; ++segmentIndex) 
{ 
    var p = new Panel() { ... }; 

    var innerContent = new LiteralControl("<p>Hello, World!</p>"); 

    p.Controls.Add(innerContent); 

    holder.Controls.Add(p); 
} 
container.Controls.Add(holder); 

或者,而不是一个LiteralControl您可以添加一个标签,一个按钮......你需要什么。

+0

我不认为可以从服务器访问LiteralControl? – 2010-08-13 17:41:23

+0

但是,您的观点很好。我需要最小的空间来存储这些值。 – 2010-08-13 17:42:18

+0

@ sub13:你当然可以使用LiteralControl。请参阅http://msdn.microsoft.com/en-us/library/system.web.ui.literalcontrol.aspx。而且LiteralControl可以使用最小的占位面积,因为您可以在LiteralControl的Text属性中正确设置所需的值(这是在呈现时被命中的)。 – 2010-08-13 21:42:33