2016-01-25 48 views
2

我有2 asp:button s叫做ShowSubmit。它們在.designer.cs爲宣稱:在CodeBehind中添加ASP.NET按鈕到列表<T>

protected global::System.Web.UI.WebControls.Button Show; 
protected global::System.Web.UI.WebControls.Button Submit; 

,我想將它們添加到List<Button>

List<Button> buttons = new List<Button> {Show,Submit}; 

它不會讓我這樣做。 2錯誤顯示

字段初始值設定項 無法引用非靜態字段,方法或屬性。

並且非靜態對象是ShowSubmit。所以我認爲我不會將它們添加到初始化程序中的列表中。

List<Button> buttons = new List<Button>(); 
buttons.Add(Show); 

但是VS告訴我buttonsShow的領域,但我用他們喜歡的類型。任何人都可以告訴我做正確的方法嗎?


改變按鈕名稱後的類別:

public partial class _Default : Page 
    { 
     List<Button> buttons = new List<Button>(); 
     buttons.Add(btnShow); 
// some click events below 
} 

SOLUTION: 解決方法是:初始化列表或在Page_Load元素添加到列表:

public partial class _Default : Page 
    { 
     private List<Button> tableButtons; 

     protected void Page_Load(object sender, EventArgs e) 
     { 
     tableButtons= new List<Button>(); 
     tableButtons.Add(btnSubmit); 
      tableButtons.Add(btnShow); 
     } 
} 
+0

你確定你得到錯誤代碼的那部分,你可以擊中'F11'來啓動應用程序,並開始調試把斷點我嘗試了你的例子在WinForms和網絡表單,並不能再現你能顯示更多信息i。e代碼什麼是類標題看起來像嘗試將您的按鈕的名稱更改爲'btnSubmit,btnShow' – MethodMan

+0

試圖將按鈕添加到列表中的代碼在哪裏?它是靜態方法嗎? – AdmSteck

+0

@MethodMan只是一個標準的WebForm類繼承'System.Web.UI.Page'與'List ',沒什麼特別的。而且我不認爲改變按鈕的名字也可以。 –

回答

0

看起來你有你的代碼的工作,但我想解釋爲什麼它可以幫助你在未來。

你得到這些錯誤的原因是因爲你試圖把你的代碼放在_Default的類定義中。在類定義中,您可以定義字段,屬性,方法以及其他不值得進入的東西,但重要的是您不能在定義中放置任何任意代碼。

您需要將代碼放在類的一個方法中,以便它能夠正確編譯和運行。但是,由於您是在webform中執行此操作,因此您還需要將代碼放入ASP.NET Lifecycle Events之一(如Page_Load)中,或者在由其中一個生命週期事件調用的方法中進行調用。

希望這會有所幫助。乾杯。

1

如果按鈕位於相同的fo RM你可以做以下

List<Button> buttons = this.Controls.OfType<Button>().ToList(); 

或原密碼

List<Button> buttons = new List<Button> 
{ 
    Show, Submit 
}; 
+0

謝謝。我把'buttons'直接放在'.aspx.cs'類的下面,而VS表示關鍵字'this'在當前上下文中不可用。另外,我不想將'Button'類型的所有控件添加到'List '中,其中只有2個。 –

+0

那麼如果你只想要其中的2個,你可以擴展它來使用'.Where',但這對你來說會有點複雜..只需使用新的列表

+0

告訴我什麼類看起來像這是一個公共部分類..? – MethodMan