Sitefinity获取页面的布局控件

时间:2017-09-26 07:38:15

标签: c# layout controls sitefinity

我遵循了本文的教学步骤1至7 https://knowledgebase.progress.com/articles/Article/page-appears-blank-to-non-admin-users

好的,但我有不同的情况。在那个Working page我放置了两个布局控件100%,然后我想从代码中获取这些控件,但是它们丢失了。

在文档和知识库中的大多数示例中,它们显示以下代码行来访问该布局控件:

var layoutControlOnPage = pageData.Controls
                .FirstOrDefault(c => c.ObjectType == typeof(LayoutControl).FullName);

但在我的情况下,layoutControlOnPage始终为NULL 。我无法访问任何布局控件。上面的代码是从.aspx网页表单页面执行的。

以下是一些资源:
https://docs.sitefinity.com/overview-create-pages/for-developers-adding-layout-controls-to-pages-and-page-templates
https://knowledgebase.progress.com/articles/Article/get-placeholders-of-feather-grid-layout-controls

是不是因为页面没有页面模板(页面模板设置为Empty (start from scratch))?

我在这里发布这个问题是因为我希望有人帮助我。在Sitefinity论坛中,我不会得到任何帮助。

我将在另一个项目中尝试这个,并将很快更新

更新
我在另一个sitefinity项目上测试了相同的代码,我可以从代码中访问布局控件。

任何想法如何在布局控件中访问以及什么阻止我访问它们?

2 个答案:

答案 0 :(得分:0)

我刚刚创建了一个没有模板的新页面,并拖动了一个内容块和两个100%布局控件。现在我可以访问它们并返回以下代码 我预期的正确控制。

var layoutControlOnPage = pageData.Controls
            .FirstOrDefault(c => c.ObjectType == typeof(LayoutControl).FullName);

我不知道上一页导致问题的原因。

答案 1 :(得分:0)

问题可能是该控件嵌套在另一个页面控件中。您将尝试使用此递归方法来查找页面控件。

https://stackoverflow.com/a/253962/2148567

来自SO的方法回答:

public static IEnumerable<Control> GetAllControls(this Control parent)
{
    foreach (Control control in parent.Controls)
    {
        yield return control;
        foreach(Control descendant in control.GetAllControls())
        {
            yield return descendant;
        }
    }
}

<强>用法

var checkBoxes = this.GetAllControls()
                     .OfType<CheckBox>()
                     .TakeWhile<CheckBox>(cb => cb.Checked);