在外部页面中渲染C1函数 - 数据丢失

时间:2012-07-04 08:35:34

标签: c1-cms yetanotherforum

我有一个子应用程序(YetAnotherForum.NET),它位于Composite C1站点的子目录中。为了保持一致的外观和感觉,我想为导航元素引入C1函数。

注意:以下代码中的所有html标记都使用方括号替换了尖括号,以便在此处发布。

我发现我可以使用以下语法调用C1函数:

[f:function ID="Function1" name="Custom.Layout.FooterLinks" runat="server"/]

但是,该功能背后的数据似乎不可用。任何想法数据问题可能是什么?也许我需要外部页面从某种形式的Composite C1页面继承?

这是功能代码:

@using Composite.Data;
@using Composite.Data.Types;
@using Composite.Data.ProcessControlled.ProcessControllers.GenericPublishProcessController;

@using CompositeC1Contrib.RazorFunctions;

@inherits CompositeC1WebPage

@functions {
    private IEnumerable FooterLinkPages()
    {
        IEnumerable pages = DataFacade.GetData();
        IEnumerable returnPages;

        using (DataConnection connection = new DataConnection())
        {
            returnPages = (from l in connection.Get()
                           join p in pages on l.Page equals p.Id
                           where l.PublicationStatus == GenericPublishProcessController.Published
                            && p.PublicationStatus == GenericPublishProcessController.Published
                           orderby l.Position ascending
                           select p).ToList();
        }

        return returnPages;
    }
}

[ul class="unstyled"]
@foreach (IPage page in FooterLinkPages())
{
    [li]@(String.IsNullOrWhiteSpace(page.MenuTitle) ? page.Title : page.MenuTitle)[/a][/li]
}
[/ul]

1 个答案:

答案 0 :(得分:1)

您需要将数据访问代码包装在:

using(Composite.Core.Threading.ThreadDataManager.EnsureInitialize())
{
    using (DataScope localeScope = new DataScope(new System.Globalization.CultureInfo("en-NZ")))
    {
        ...
    }
}