TagMapping AudienceEditor控件无法正常工作

时间:2011-11-21 17:31:12

标签: sharepoint-2010

我需要在任何地方向AudienceEditor控件添加文本,因此我创建了一个自定义

class inheriting from `Microsoft.Office.Server.WebControls.AudienceEditor` class 

   public class AudienceEditorText : Microsoft.Office.Server.WebControls.AudienceEditor
   {
        protected override void OnPreRender(EventArgs e)
        {
            base.OnPreRender(e);
            Label lblText = new Label();
            lblText.ID = "Note";
            lblText.Visible = true;
            lblText.Text = "Text Needs to be changed";
            lblText.Attributes.Add("style", "color: red");
            Controls.Add(lblText);          
        }

        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
        } 

        protected override void CreateChildControls()
        {
            base.CreateChildControls();
        }

        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

        }
    }

并在web.config

中添加了以下标记
 <tagMapping>        
    <add tagType="Microsoft.Office.Server.WebControls.AudienceEditor, Microsoft.Office.Server, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" mappedTagType="Hub.AudienceEditorProject.AudienceEditorText, Hub.AudienceEditorProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=df1f6b11d06cf6ca" />
  </tagMapping>

我希望AudienceEditorEditForm.aspx中的新类替换NewForm.aspx控件,但这不起作用。我尝试调试自定义类,但执行没有进入项目,这意味着AudienceEditor控件不会被替换。

视图源告诉Audience字段由Microsoft.Office.Server.WebControls.FieldTypes.SPFieldTargetTo类呈现,该类包含Microsoft.Office.Server.WebControls.FieldTypes.SpFieldTaretToControl,后者包含AudienceEditor控件。我尝试从所有这三个控件继承并标记它们,但它根本不起作用。

只是为了测试我已经映射了TextBox控件,并且在同一页面上工作正常。它也进入Debug。但是AudienceEditor根本就没有用。

1 个答案:

答案 0 :(得分:0)

我能想到的只是你看到了这种行为,因为tagMappings are applied at compile time以及将AudienceEditor实例化为子控件的父控件已经被编译到它自己的dll中。

我认为可以胜任的一些替代解决方案。

  • 使用css显示图片,文字为背景图片, 定位在你想要的地方。
  • 使用javascript注入文本时 该文档已在浏览器中加载
  • 使用控制适配器 控制Audience Editor控件的渲染(不是很容易 在我们谈论SharePoint时进行部署