基于编辑/浏览模式在Webpart中显示/隐藏控件

时间:2015-09-11 12:33:16

标签: c# asp.net sharepoint sharepoint-2010 web-parts

我有一个Visual Studio项目,我在其中创建了一个Visual Webpart。在用户控件中,我有一个面板,我想在编辑模式下显示并隐藏在浏览模式中。

ASP.NET代码段:

<asp:panel runat="server" ID="myControl">

用户控制代码中的C#代码段:

protected override void OnPreRender(EventArgs e)
{
    base.OnPreRender(e);
    WebPartManager wpm = WebPartManager.GetCurrentWebPartManager(this.Page);
    if (wpm.DisplayMode == WebPartManager.BrowseDisplayMode)
    {
        myControl.Attributes.Add("style", "display: none");
    }
    else if (wpm.DisplayMode == WebPartManager.EditDisplayMode)
    {
        myControl.Attributes.Add("style", "display: block");
    }
}

这样做有效,但如果我在相同页面上有两个相同的网页部件,并且将一个网站部分设置为编辑模式,则会在两个网络部件中显示该面板。似乎OnPreRender事件代码在页面上为两个webpart运行。

我甚至尝试将代码编写为this.myControl.Attributes.Add("style", "display: block");,但它仍然无效。

我希望OnPreRender代码仅在其webpart上运行,而不是在页面上修改其他webaprt。我该如何解决这个问题?有没有更好(或首选)的方法呢?

注意:我需要使用display: none,因为可以通过JavaScript访问该面板。

PS:这是来自here的交叉帖子,因为我没有得到任何令人满意的答案。

1 个答案:

答案 0 :(得分:0)

我在页面加载时也这样做,它对我来说很好..(页面有大约10个WP,在编辑模式下只有1个表现不同。)

也许你的意思是你在页面上有2个相同的webparts?然后我猜两个webparts的行为都相同,因为WebPartManager.DisplayMode会返回页面的模式,而不是webpart。 (见msdn)。