2010-08-13 73 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