簡體   English   中英

在 Umbraco 中檢索使用 XSLT 到 AJAX 生成的 HTML

[英]Retrieving HTML generated using XSLT through AJAX in Umbraco

I am new to Umbraco, just want to get input on if the following is the way to go to retrieve HTML generated using XSLT through AJAX.

  1. 創建生成 HTML 的 XSLT 宏

  2. 將 XSLT 宏放在空白頁中

  3. 使用 AJAX 調用頁面

有一個更好的方法嗎?

我可以在 .NET 代碼中以編程方式運行 XSLT 宏並返回結果嗎? 這樣我就不必將 XSLT 宏放在空白頁上。

您可以嘗試umbraco.library.RenderMacroContent來渲染 Xslt 宏。

http://our.umbraco.org/wiki/reference/umbracolibrary/rendermacrocontent

這是我用來在 Umbraco 中為 XSLT 宏獲取 HTML 的代碼。 設置一個 RestExtension 來返回這個內容。 代碼沒有經過精煉和硬編碼。 我從 xsltVisualize.aspx.cs 偷了這個

public static string GetMacroContent()
    {
        HttpRequest post = HttpContext.Current.Request;
        Member umbMember = Member.GetCurrentMember();
        string macroname = post["macroname"];
        string content = string.Empty;

        if(Member.IsLoggedOn() && !string.IsNullOrEmpty(macroname))
        {
            string xslt = "";

            System.IO.StreamReader xsltFile =
            System.IO.File.OpenText(
                IOHelper.MapPath(SystemDirectories.Root + "/xslt/htmlcontent.xslt")
            );

            xslt = xsltFile.ReadToEnd();
            xsltFile.Close();

            // prepare support for XSLT extensions
            xslt = macro.AddXsltExtensionsToHeader(xslt);

            Dictionary<string, object> parameters = new Dictionary<string, object>(1);
            parameters.Add("currentPage", library.GetXmlNodeById("1057"));


            // apply the XSLT transformation
            string xsltResult = "";
            XmlTextReader xslReader = null;
            try
            {
                xslReader = new XmlTextReader(new StringReader(xslt));
                System.Xml.Xsl.XslCompiledTransform xsl = macro.CreateXsltTransform(xslReader, false);
                xsltResult = macro.GetXsltTransformResult(new XmlDocument(), xsl, parameters);
            }
            catch(Exception ee)
            {
                xsltResult = string.Format(
                    "<div class=\"error\"><h3>Error parsing the XSLT:</h3><p>{0}</p></div>",
                    ee.ToString());
            }
            finally
            {
                xslReader.Close();
            }               
        }

        return content;
    }

    private static XPathNodeIterator GetXmlNodeById(string id)
    {
        if(UmbracoContext.Current.GetXml().GetElementById(id) != null)
        {
            XPathNavigator xp = UmbracoContext.Current.GetXml().CreateNavigator();
            xp.MoveToId(id);
            return xp.Select(".");
        }
        else
        {
            XmlDocument xd = new XmlDocument();
            xd.LoadXml(string.Format("<error>No published item exist with id {0}</error>", id));
            return xd.CreateNavigator().Select(".");
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM