在使用XSLT的Sitecore渲染中使用AJAX

时间:2016-08-17 07:34:37

标签: asp.net ajax sitecore asp.net-ajax sitecore6

我是Sitecore和.NET的新手。我有一个旧的现有项目,该项目基于Sitecore 6.5,并由XSLT和.NET Framework 3.5呈现内容。

现在我需要创建一个可以进行AJAX调用的页面,以便不需要刷新页面并生成新内容。我对使用PHP的AJAX调用非常熟悉,但我对.NET中的那些调用很困惑。

我用Google搜索,发现大部分教程都基于Razor视图渲染。

任何人都可以向我提供一个完整的图片,我该怎样才能达到我的目标?

我想知道以下步骤是否正确:

  1. 根据传入
  2. 的网址参数,创建一个.xslt,以呈现不同的内容
  3. 创建.ashx以获取.xslt内容
  4. JavaScript AJAX调用.ashx并将xml内容转换为HTML
  5. 我可以遵循哪些例子?

    谢谢!

    ============================================

    更新: 我尝试了上面的流程,并且可以成功地通过AJAX打印Hello World。 但是,我不知道如何从以下带有不同参数的.ashx文件中获取XSLT中的内容?

    是否有任何HttpPost / IsPostBack可以帮助检查POST方法是否访问.ashx?

    enter image description here

1 个答案:

答案 0 :(得分:0)

我终于用以下步骤解决了这个问题。

  1. 创建.ashx以呈现sitecore内容。 我已经与.ashx,.aspx和.asmx进行了比较。似乎.ashx是最好的选择。

    using Sitecore.Configuration;
    using Sitecore.Data;
    using Sitecore.Data.Fields;
    using Sitecore.Data.Items;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    
    namespace MYPROJECT.Web
    {
        /// <summary>
        /// Summary description for AjaxTest
        /// </summary>
        public class AjaxTest : IHttpHandler
        {
            public void ProcessRequest(HttpContext context)
            {
                context.Response.ContentType = "text/html";
                string ID = context.Request.QueryString["ID"];
                Database master = Factory.GetDatabase("master");
                Item source = master.GetItem("/sitecore/content/Home/MYPROJECT/gallery");
                Item[] items = source.GetChildren().ToArray();
                context.Response.Write(items[ID].Fields["image"].Value); 
            }
    
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
        }
    }
    
  2. p.s我从上面删除了一些验证码。

    1. JavaScript AJAX调用.ashx。

          $j('#ajax_test').click(function(){
              $j.ajax({
                  //type: 'POST',
                  url: '/AjaxTest.ashx?ID='+$j('#inputunmber').val(),  
                  //dataType: 'html',
                  //data: form.find(':input').serialize(),
                  success: function( response ) {
                      $j('.test_result').append(response);
                  },
                  error: function (xhr) {
                      alert("Error:" + xhr.responseText);
                  }
              });  
          });