【问题标题】:How can I do a partial page update with ajax using Sitecore?如何使用 Sitecore 使用 ajax 进行部分页面更新?
【发布时间】:2014-01-10 15:28:52
【问题描述】:

我的 Web 应用程序中有一个特定页面(站点核心内容项),由站点核心布局和许多子布局组成。其中一个子布局是一个用户控件,我希望在单击某个按钮后刷新它。我只想刷新那个子布局,而页面的其余部分保持不变(这里是典型的 ajax 情况)。当我的所有站点核心内容项都与我的 Web 应用程序中的整个页面(带有子布局的布局)直接相关时,我如何使用站点核心来实现这一点?就我而言,我想使用 ajax 仅返回特定的单个子布局的内容。使用 sitecore 处理这种 ajax 情况的最佳做法是什么?我正在使用 sitecore 6.5。

【问题讨论】:

  • 子布局上的按钮需要更新吗?
  • @mdresser 这是一个很好的问题,肯定会帮助澄清我的问题。是的,它在同一个子布局上。子布局上有按钮元素以及一个额外的用户控件。我只需要更新子布局内的用户控件。

标签: asp.net ajax webforms sitecore


【解决方案1】:

由于您使用短语“部分页面更新”,我假设您使用的是 UpdatePanel。这与在传统的 ASP.NET 应用程序中的功能并没有什么不同。您将在服务器端处理程序方法中处理按钮单击,修改控件的属性并让更新面板处理其余部分。

如果您不使用更新面板,您有几个选项,具体取决于您想要实现的目标。

通常,如果您单击一个按钮来触发一个 ajax 请求,您就是将一些数据发送回服务器。对于这种情况,您通常会设置一个 Web 服务来处理数据并返回一些结果。您的服务可以访问 Sitecore 数据,但不使用 Sitecore 演示引擎。

另一种选择是向 Sitecore 页面发出请求(可能与原始请求相同),但包含查询字符串参数以触发不同的设备。您可以将此设备配置为呈现 JSON、XML 或 HTML 片段,而不是正常的布局和子布局电池。

另一种选择是使用 Sitecore Item Web API。如果你走这条路,你将有另一个选择(以及一些学习曲线)。首先阅读 SDN 上的文档或有关该主题的许多博客文章。

【讨论】:

  • 我自己会使用单独的设备选项,并会通过 jQuery 使用查询字符串触发器轮询页面。很好的答案本
【解决方案2】:

有许多选项可用于实现异步行为。这些都没有真正与 Sitecore 直接相关,但是,有一些 Sitecore 特定的事情需要注意,我在下面突出显示

  1. UpdatePanel 控件
    如果您正在执行一些不关心超快性能的琐碎事情,只需包装您的按钮(以及您想要的任何其他 .NET 控件) 喜欢更新)在UpdatePanel Control。你还需要放弃 将ScriptManager 控件放入您的基本布局中,靠近顶部内部 <form> 元素。 注意:使用此方法时,您需要确保您的子布局没有启用缓存,否则您的按钮将无法正确回发

  2. 创建您自己的网络服务
    在这种情况下,有许多客户端框架可用于实现相同的结果。我的首选方法是使用 jQuery 挂钩客户端按钮单击事件,准备一个请求对象,然后将其发布到服务器(取回更新客户端所需的信息)。

    这里有一些与 Sitecore 一起使用的网络服务选项 - 允许您访问 Sitecore.Context 和所有后续的 Sitecore API。

    1. 创建一个接受参数作为查询字符串的空 ASPX Web 表单。在Page_Load 方法中,对参数进行一些处理,并使用Response.Write() 直接写入响应。 JavaScriptSerializer 可以方便地序列化为 JSON,只需确保设置 Response.ContentType = "text/javascript";

    2. 创建一个ASMX Web Service 并使用[WebMethod](或[WebMethod(EnableSession = true)],如果您需要访问会话数据)装饰您的方法。

    3. 使用 MVC 控制器(例如:ASP.NET Web Api)创建 API。如here 所述,我相信在 Sitecore 6.5 中有一些问题需要解决。

【讨论】:

    【解决方案3】:

    由于这些都包含在单个子布局中,您可以简单地使用标准的<asp:UpdatePanel> 包围您的按钮和用户控件。在代码隐藏中,您可以执行任何必要的数据绑定/数据检索来更新用户控件的内容。

    请注意,如果按钮位于与需要更新内容的子布局不同的子布局上,您可以使用this question 中描述的方法,只要两个控件的内容都在<asp:UpdatePanel> 内。

    回答您的其他问题:

    使用 sitecore 处理这种 ajax 情况的最佳做法是什么?

    对于这类事情并没有真正特定于 Sitecore 的最佳实践。在这种情况下,任何适用于普通 ASP.NET 的方法也适用于 Sitecore。我上面描述的方法可能是最简单和最快的实现方式,但您也可以通过 jQuery 和 ajax 调用 Web 服务来加载更新的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-18
      • 1970-01-01
      • 1970-01-01
      • 2019-12-23
      • 2021-08-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多