1

我正在尝试根据 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”。知道如何让它工作吗?

4

1 回答 1

2

您的第一个示例失败的原因仅仅是因为您在初始化实例字段时无法引用其他实例成员,因为这是在调用构造函数之前完成的(仅),请参阅http://msdn.microsoft.com/en-us/library /ms173118.aspx

在这种情况下,关键是 EPiServer 中的属性如果被认为是空的,将返回 null。这意味着具有空字符串值的字符串属性将返回 null,而具有 false 值的布尔属性也将返回 null。

因此,在您的情况下,当您想为布尔属性分配一个值时,只需检查该属性是否返回任何值。

DateVisible = CurrentPage["HideDate"] == null;

或者另一种选择是使用 PageBase 类上的 IsValue 方法进行检查。

DateVisible = !IsValue("HideDate");

此外,由于您使用的是强类型页面类型,因此您可以只使用当前页面上的属性(假设 HideData 属性已通过这种方式添加)

DateVisible = !CurrentPage.HideDate;

最后,您还可以直接从后面的代码中分配可见属性,而无需通过 DateVisible 字段和 DataBind。

public partial class Event : EPiServer.TemplatePage<EventPage>
{
    protected void Page_Load(object sender, EventArgs e)
    {
        DateProp.Visible = !CurrentPage.HideDate;
    }
}
于 2014-05-15T00:00:22.043 回答