gpt4 book ai didi

asp.net - 如何从 Sitecore 中的另一个子布局访问子布局控件?

转载 作者:行者123 更新时间:2023-12-02 09:32:52 24 4
gpt4 key购买 nike

我有主布局和三个子布局标题、内容、页脚。在标题子布局中,我有搜索文本框和搜索按钮,单击搜索按钮结果将显示在内容子布局上,在内容子布局上我有中继器,但我无法访问标题子布局中的中继器控件。

enter image description here

最佳答案

我之前在 Sitecore 网站中处理过类似的问题。我建议您考虑两种方法:

1) 通过一些自定义代码,您的布局可以充当子布局的中介

定义某种“接收结果”接口(interface),可以由任何想要处理搜索结果的子布局实现。例如:

interface IRenderSearchResults
{
void RenderResults(IEnumerable<SearchResultData> resultSet);
}

使您的“内容”子布局实现此接口(interface),以便当某些内容向其发送搜索结果时,它可以处理它们:

public class ContentSublayout : Sublayout, IRenderSearchResults
{
public void RenderResults(IEnumerable<SearchResultData> resultSet)
{
repeaterControl.DataSource = resultSet;
// do whatever other data binding tasks are required
}
}

然后扩展您的布局,使其具有“注册我以接收搜索结果”和“将搜索结果发送到需要的任何地方”的方法:

public class MyLayout : Page
{
private List<IRenderSearchResults> resultControls = new List<IRenderSearchResults>();

public void RegisterSearchResultsControl(IRenderSearchResults control)
{
resultControls.Add(control);
}

public void DispatchSearchResults(IEnumerable<SearchResultData> resultSet)
{
foreach(var control in resultControls)
{
control.RenderResults(resultSet);
}
}
}

您的“内容”控件应该在创建时通过调用布局上的注册方法来注册自身。添加一个方法,例如:

protected void Page_Init(object sender, EventArgs e)
{
MyLayout layout = (MyLayout)this.Page;
layout.RegisterSearchResultsControl(this);
}

最后,当标题控件生成要显示的结果时,它应该通过调用布局来分派(dispatch)它们:

public class MyHeader : SubLayout
{
public void DoTheSearch()
{
// whatever you do to perform a search

MyLayout layout = (MyLayout)this.Page;
layout.DispatchSearchResults(theSearchResults);
}
}

(这段代码是我凭空想出来的,而不是复制/粘贴的 - 所以可能有拼写错误 - 抱歉)

这样,任何结果接收控件集都可以存在于页面上的任何位置(如果需要,可以通过页面编辑器添加/删除),但每当运行搜索时,如果它们位于页面上,它们就会获得结果。这种方法还可以让您将结果的分页 UI 或结果摘要显示等内容制作到单独的控件中,编辑者可以在页面中移动这些控件。

请注意,如果您的网站上有多个布局,您可能需要确保调度代码位于所有布局的基类中,以确保在编辑器更改特定页面的布局时它始终可用.

2) 您或许可以使用 Sitecore 的事件模型本文对事件的内部框架如何工作提供了相当有用的描述:https://adeneys.wordpress.com/2012/10/21/decoupling-through-the-sitecore-event-pool/但如果你用谷歌搜索的话还有其他的。

关于asp.net - 如何从 Sitecore 中的另一个子布局访问子布局控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30829560/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com