如何使用Sitecore使用ajax进行部分页面更新?

时间:2013-12-22 04:02:45

标签: asp.net ajax webforms sitecore

我的网页应用程序中有一个特定的页面(sitecore内容项),由sitecore布局和许多子布局组成。其中一个子布局是一个用户控件,我希望在单击某个按钮后刷新。我希望只刷新子布局,并保持页面的其余部分保持不变(这里典型的ajax情况)。当我的所有sitecore内容项与我的Web应用程序中的整页(与子布局布局)直接相关时,如何使用sitecore完成此操作?在我的例子中,我想使用ajax仅返回特定的单个子布局的内容。使用sitecore这种ajax情况的最佳做法是什么?我正在使用sitecore 6.5。

3 个答案:

答案 0 :(得分:7)

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

如果您没有使用更新面板,则可以根据您想要实现的目标选择一些选项。

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

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

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

答案 1 :(得分:2)

由于这一切都包含在单个Sublayout中,因此您可以简单地使用围绕按钮和用户控件的标准<asp:UpdatePanel>。在代码隐藏中,您可以执行更新用户控件内容所需的任何数据绑定/数据检索。

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

回答你的另一个问题:

  

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

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

答案 2 :(得分:2)

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

  1. UpdatePanel控件
    如果您正在执行一些无关紧要的超快性能的简单操作,只需将按钮(以及任何其他.NET控件)包裹起来即可 像UpdatePanel Control中的更新一样。你也需要放弃 ScriptManager控制你的基础布局靠近顶部内部 <form>元素。 注意:使用此方法时,您需要确保您的Sublayout未启用缓存,否则您的按钮将无法正确回发

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

    以下是一些与Sitecore配合使用的Web服务选项 - 允许您访问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。我相信在Sitecore 6.5中有一些问题需要解决,如here所述。