我有一个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的交叉帖子,因为我没有得到任何令人满意的答案。
答案 0 :(得分:0)
我在页面加载时也这样做,它对我来说很好..(页面有大约10个WP,在编辑模式下只有1个表现不同。)
也许你的意思是你在页面上有2个相同的webparts?然后我猜两个webparts的行为都相同,因为WebPartManager.DisplayMode会返回页面的模式,而不是webpart。 (见msdn)。