2012-12-12 49 views
0

我創建了一個類,我想從組合框,複選框或文本框中返回選定的值。在ASP.NET WebForms中使用FindControl返回未知類型的值

的代碼看起來是這樣的:

private string GetControlValue(string controlId) 
    { 
     var control = FindControl(controlId); 

     if (control.GetType() == typeof(RadTextBox)) 
     { 
      return ((RadInputControl)control).Text; 
     } 
     else if (control.GetType() == typeof(RadComboBox)) 
     { 
      return ((RadComboBox)control).SelectedValue; 
     } 
     else if (control.GetType() == typeof(CheckBox)) 
     { 
      return ((CheckBox)control).Checked.ToString(); 
     } 
     else 
     { 
      return null; 
     } 
    } 

我可以在一些更有效的方式做到這一點?我想我的例子可能是拳擊每種類型,它會降低性能。

回答

3

你可以使用繼承樹縮短代碼:

private string GetControlValue(string controlId) 
{ 
    var control = FindControl(controlId); 
    if(control is ITextControl) 
    { 
     return ((ITextControl) control).Text; // works also for the RadComboBox since it returns the currently selected item's text 
    } 
    else if(control is ICheckBoxControl) 
    { 
     return ((ICheckBoxControl)control).Checked.ToString(); 
    } 
    else 
    { 
     return null; 
    } 
} 
1

可以使用as關鍵字:

private string GetControlValue(string controlId) 
{ 
    var control = FindControl(controlId); 
    var radTextBox = control as RadTextBox; 
    if (radTextBox != null) 
    { 
     return radTextBox.Text; 
    } 

    var radComboBox = control as RadComboBox; 
    if (radComboBox != null) 
    { 
     return radComboBox.SelectedValue; 
    } 

    var checkBox = control as CheckBox; 
    if (checkBox != null) 
    { 
     return checkBox.Checked.ToString(); 
    } 

    return null; 
} 

BTW:拳擊是不是在你的代碼發生。

+0

感謝您的幫助。如果任何人有另一個建議,我會暫時關閉這一段時間。 –