我遵循了本文的教学步骤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项目上测试了相同的代码,我可以从代码中访问布局控件。
任何想法如何在布局控件中访问以及什么阻止我访问它们?
答案 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);