2012-09-30 21 views
1

任何人都可以提出一种设置只读所有文本框的方法。我试图用一个递归函数,但它会说,System.Web.UI.Control有没有这样的定义只读为所有文本框设置只读C#ASP.NET

private void SetReadOnly<T>(Control parent, bool isReadOnly) 
{ 
    foreach (Control ctrl in parent.Controls) 
    { 
     if (ctrl is T) 
      ctrl.ReadOnly = isReadOnly; // this line here wont work . 
     SetReadOnly<T>(ctrl, isReadOnly); 
    } 
} 

任何替代请!

回答

1

的问题与您的代码是T可以任何类型,并非所有类型的具有这样的性质ReadOnly。因此编译器会窒息。

你不需要使用泛型要做到这一点:

private void SetTextBoxReadOnly(Control parent, bool readOnly) 
{ 
    // Get all TextBoxes and set the value of the ReadOnly property. 
    foreach (var tb in parent.Controls.OfType<TextBox>()) 
    tb.ReadOnly = readOnly; 

    // Recurse through all Controls 
    foreach(Control c in parent.Controls) 
    SetReadOnly(c, readOnly); 
} 

不过,若你想使用泛型,你可以做这样的:

private void SetTextBoxReadOnly<T>(Control parent, bool readOnly) where T : TextBox 
{ 
    // Get all TextBoxes and set the value of the ReadOnly property. 
    foreach (var tb in parent.Controls.OfType<T>()) 
    tb.ReadOnly = readOnly; 

    // Recurse through all Controls 
    foreach(Control c in parent.Controls) 
    SetReadOnly<T>(c, readOnly); 
} 

这将限制通用键入到TextBox从它派生的任何类。这确保ReadOnly属性将始终在那里,编译器知道这一点。

0

您可以将此上使用jQuery的客户端:

$(document).ready(function() { 
    $('input[type=text]').attr('readonly', true); 
});