如何从代码隐藏设置元素可见性
本文关键字:设置 元素 可见性 隐藏 代码 | 更新日期: 2023-09-27 18:03:26
我试图根据EPiServer中设置的页面属性,从代码隐藏文件设置aspx页面控件的可见性。相关控件的编码如下:
<asp:Content ContentPlaceHolderID="RelatedContent" runat="server">
<p id="DateProp" runat="server" Visible ="<%# DateVisible %>"><strong>Date:</strong> <%= ((DateTime)CurrentPage["EventDate"]).ToString("d MMMM yyyy") %></p>
</asp:Content>
我已经尝试了几种不同的方法来做到这一点,基于前面的问题,但我还没有能够得到它的工作。首先,我试着这样做:
public partial class Event : EPiServer.TemplatePage<EventPage>
{
public bool DateVisible = (bool)CurrentPage["HideDate"] == true ? false : true;
protected void Page_Load(object sender, EventArgs e)
{
DataBind();
}
}
给出错误" Error 80 An object reference is required for the non-static field, method, or property EPiServer.PageBase<JamesTrustWF.Web.Models.Pages.EventPage>.CurrentPage.get'
"
然后我试了这个:
public partial class Event : EPiServer.TemplatePage<EventPage>
{
public bool DateVisible = true;
protected void Page_Load(object sender, EventArgs e)
{
DateVisible = (bool)CurrentPage["HideDate"] == true ? false : true;
DataBind();
}
}
给出错误" Object reference not set to an instance of an object
"。知道怎么让它工作吗?
第一个示例失败的原因很简单,因为在初始化实例字段时无法引用其他实例成员,因为这是在调用构造函数之前完成的,请参阅http://msdn.microsoft.com/en-us/library/ms173118.aspx
在这种情况下的关键是,如果EPiServer中的属性被认为是空的,则返回null。这意味着具有空字符串值的字符串属性将返回null,具有假值的布尔属性也返回null。
所以在你的例子中,当你想给一个布尔属性赋值时,只需检查该属性是否返回任何值。
DateVisible = CurrentPage["HideDate"] == null;
或者另一种选择是使用PageBase类上的IsValue方法来执行检查。
DateVisible = !IsValue("HideDate");
而且,由于您使用的是强类型页面类型,因此您可以仅在当前页面上使用该属性(假设HideData属性已以这种方式添加)
DateVisible = !CurrentPage.HideDate;
最后,您还可以直接从后面的代码中分配可见属性,而不必经过datevvisible字段和DataBind。
public partial class Event : EPiServer.TemplatePage<EventPage>
{
protected void Page_Load(object sender, EventArgs e)
{
DateProp.Visible = !CurrentPage.HideDate;
}
}