繁体   English   中英

将所有文本框设置为只读C#ASP.NET

[英]Setting readonly for all textboxes C# ASP.NET

谁能建议一种设置所有文本框只读的方法。 我尝试使用一个递归函数,但是它将说System.Web.UI.Control没有为ReadOnly提供这样的定义

    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);
    }
}

任何替代品请!

您的代码的问题在于T可以是任何类型,并非所有类型都具有ReadOnly属性。 因此,编译器将阻塞。

您无需使用泛型即可执行此操作:

private void SetReadOnly(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 SetReadOnly<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属性始终存在,并且编译器知道这一点。

您可以使用jQuery在客户端进行设置:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM