任何人都可以建议一种方法来设置所有文本框的只读。我尝试使用递归函数,但它会说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);
}
}
任何替代方案请!!
答案 0 :(得分:1)
您的代码存在的问题是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
属性始终存在,并且编译器知道这一点。
答案 1 :(得分:0)
您可以使用jQuery在客户端设置:
$(document).ready(function() {
$('input[type=text]').attr('readonly', true);
});