技术开发 频道

重写表单字段呈现逻辑


【IT168技术文档】

  下面是ListFieldIterator原始的CreateControl方法代码:
[SharePointPermission(SecurityAction.Demand, ObjectModel=true)] protected override void CreateChildControls() { this.Controls.Clear(); if (this.ControlTemplate == null) { throw new ArgumentException("Could not find ListFieldIterator control template."); } for (int i = 0; i < base.Fields.Count; i++) { SPField field = base.Fields[i]; if (!this.IsFieldExcluded(field)) { TemplateContainer child = new TemplateContainer(); this.Controls.Add(child); child.ControlMode = base.ControlMode; child.FieldName = field.InternalName; this.ControlTemplate.InstantiateIn(child); } } }
  下面是重写后的ListFieldIterator:
public class EditControlListFieldIterator : Microsoft.SharePoint.WebControls.ListFieldIterator { protected override void CreateChildControls() { //只处理编辑模式 if (this.ControlMode != SPControlMode.Edit) { base.CreateChildControls(); return; } SPUser currentUser = SPContext.Current.Web.CurrentUser ; //站点管理员可以编辑所有字段 if (currentUser.IsSiteAdmin) { base.CreateChildControls(); return; } //获取权限配置信息 ListFieldEditSetting listSetting = ListFieldEditSetting.GetListSetting( this.ListId ) ; if( listSetting == null || listSetting.Count == 0 ) { base.CreateChildControls(); return ; } //base.CreateChildControls(); this.Controls.Clear(); if (this.ControlTemplate == null) { throw new ArgumentException("Could not find ListFieldIterator control template."); } SPFieldUserValue authorFieldValue = new SPFieldUserValue ( SPContext.Current.Web , ""+ this.ListItem["Author"] ) ; SPUser author = authorFieldValue.User; Type t = typeof(TemplateContainer); //反射获取TemplateContainer的ControlMode属性 PropertyInfo ControlModeProp = t.GetProperty("ControlMode", BindingFlags.Instance | BindingFlags.NonPublic); PropertyInfo FieldNameProp = t.GetProperty("FieldName", BindingFlags.Instance | BindingFlags.NonPublic); for (int i = 0; i < base.Fields.Count; i++) { SPField field = base.Fields[i]; if (!this.IsFieldExcluded(field)) { TemplateContainer child = new TemplateContainer(); this.Controls.Add(child); FieldEditSetting set = listSetting.GetByFieldName(field.InternalName); if (set != null && !set.CanEdit(currentUser, author)) { //child.ControlMode = base.ControlMode; //child.FieldName = field.InternalName; //ControlModeProp.SetValue(child, this.ControlMode,null); ControlModeProp.SetValue(child, SPControlMode.Display, null); } FieldNameProp.SetValue(child, field.InternalName, null); this.ControlTemplate.InstantiateIn(child); } } } }
0
相关文章