如何在运行时使字段可编辑

时间:2011-05-27 08:18:51

标签: c# asp.net-mvc data-annotations

是否可以在运行时应用EditableAttribute?我想仅在用户具有某个角色时才使某些属性可编辑。不幸的是EdiatbleAttribute是密封的。我可以尝试通过反射在运行时应用它,但也许有更合适的方法来做到这一点。感谢您的任何建议。

祝你好运

2 个答案:

答案 0 :(得分:1)

hack 可在以下网址找到:How to Set Attribute Value at Runtime-- and How to Work around a Silly Bug

private void SetPropertyGrid() 
{ 
     PropertyDescriptor descriptor = TypeDescriptor.GetProperties(typeof(Student))["Address"];
     ReadOnlyAttribute attrib = (ReadOnlyAttribute)descriptor.Attributes[typeof(ReadOnlyAttribute)];
     FieldInfo isReadOnly = attrib.GetType().GetField("isReadOnly", BindingFlags.NonPublic | BindingFlags.Instance);
        isReadOnly.SetValue(attrib,true);

     propertyGrid1.SelectedObject = new Student();  
}

我能够使用此代码更改属性的ReadOnly属性值。语句propertyGrid1.SelectedObject = new Student();可以替换为propertyGrid1.SelectedObject = myStudent,即您可以修改现有对象的属性。

另外,请看一下类似的问题:Change Attribute's parameter at runtime

答案 1 :(得分:0)

我认为一个很好的选择是为你需要使用的控件(TextBox等)创建一个扩展助手,如果IsReadOnly属性为true(可编辑(false)),则生成一个禁用的文本框。