如何从代码隐藏设置元素可见性

本文关键字:设置 元素 可见性 隐藏 代码 | 更新日期: 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;
    }
}
相关文章: