2014-01-12 3 views
1

У меня есть веб-форма с 5 раскрывающимся списком asp.net. Я хотел бы иметь метод в коде, который позволяет мне передать имя выпадающего списка и отключает его. У меня есть следующий код, который работает, но я думаю, что он может быть написан чистым, что позволяет мне отключить более одного раскрывающегося списка при вызове метода один раз, в отличие от того, где в настоящее время, если я хочу отключить два или три, я должен вызвать метод три раза каждый время передачи разных имен выпадающего списка. я надеюсь, что следующий код делает его немного понятнее:Принять несколько необязательных параметров в методе 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); , например, если я хотел отключить два ящика, вместо того, чтобы вызывать один и тот же метод дважды с разными dropdownlists? Если да, то как моя фактическая функция «disableDropDown» будет изменена, чтобы разрешить более одного раскрывающегося списка?

Большое спасибо

+0

Почему вы вернуть 'DropDownList'? –

+0

Я полагаю, вам не нужно, может быть, функция просто отключить их, что принимает несколько dropdownlists – 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 собственности, на этом пути вы можете использовать его для других такие как TextBox или Label, так что ваш метод более полезен
  • public static делает его также более удобным для использования, вам не нужно обращаться к экземпляру окружающего Page-класса в любом случае.

Вы можете назвать это с одиночными 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); 
Смежные вопросы