2014-01-12 48 views
1

我有一個帶有5個asp.net dropdownlist的web表單。我想在後面的代碼中有一個方法,它允許我傳遞下拉列表的名稱並禁用它。我有下面的代碼可以工作,但我認爲它可以寫得更清晰,允許我在調用方法時禁用多個dropdownlist,與當前的情況相反,如果我想禁用兩個或三個,我必須每次調用方法三次時間通過dropdownlist的不同名稱。我希望下面的代碼使得它更清楚一點:在C#中接受多個可選參數ASP.NET的DropDownList方法

public partial class _Default : Page 
{ 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     disableDropDown(DropDownList1); 
    } 


    protected DropDownList disableDropDown(DropDownList a) 
    { 
     if (a != null) 
     { 
      a.Enabled = false; 
      return a; 
     } 
     else 
     { 
      return null; 
     } 

    } 


} 

它會更好有類似disableDropDown(DropDownList1,DropDownList2); 例如,如果我想禁用兩個盒子,而不必使用不同的下拉列表兩次調用相同的方法?如果是這樣,我的實際「disableDropDown」函數將如何修改以允許多個下拉列表?

非常感謝

+0

爲什麼你返回'Dro​​pDownList'? –

+0

我想你不需要,也許功能只是禁用他們接受多個下拉列表 – drac

回答

1

的一種方式,你可以使用一個params陣列:

public static void EnableControls(bool enable, params WebControl[] controls) 
{ 
    foreach (WebControl c in controls) 
    { 
     if (c != null) c.Enabled = enable; 
    } 
} 

請注意,

  • 我返回void(無)因爲您只是設置了已有的控件的屬性。返回他們將是毫無意義
  • 我添加了一個參數enable允許啓用或禁用
  • 我已經改變了它acceppt WebControls因爲這是與Enabled屬性類的控件,在這條路上,你可以將其用於其他像TextBoxLabel這樣的控件也是如此,所以你的方法更有用
  • public static使它更加可用,無論如何你都不需要訪問周圍Page -class的實例。

您可以用單DropDownList把它稱之爲:

EnableControls(false, dropdown1, dropdown2, dropdown3); 

或數組(僞代碼):

var manyDropDowns = new DropDownList[]{ dropdown1, ..., dropDown999999 }; 
EnableControls(false, manyDropDowns); 
+0

這是非常感謝! – drac

0

你可以使用params。 (另外,你不需要從這裏返回任何東西。)

protected void DisableDropDown(params DropDownList[] ddls) 
{ 
    foreach(var ddl in ddls) 
    { 
     ddl.Enabled = false; 
    } 
} 

並使用它像這樣:

DisableDropDown(DropDownList1, DropDownList2, DropDownList3); 
相關問題