2014-11-05 144 views
0

是否有可能在剃刀功能中呈現特定頁面。我試過@RenderPage,但我無法找出路徑。有沒有內置的功能來完成這個功能?呈現父頁面中的子頁面

感謝約翰

回答

0

不是一個真正的C1具體的辦法,但我個人最好的方法是隻讓有問題的頁面創建一個單獨的網絡請求,解析出HTML和渲染。

這段代碼可以作爲一個例子,它是我使用的1:1。正如你所看到的關鍵是要找到一個包裝你的內容,在我的例子其元素的元素裏面有一個ID等於ContentColumnInner

public static string GetContentFromPage(Guid pageId) 
{ 
    var DomainName = HttpContext.Current.Request.Url.Authority; 
    var Uri = String.Format("http://{0}/page({1})", DomainName, pageId); 
    var request = WebRequest.Create(Uri); 

    // If required by the server, set the credentials. 
    request.Credentials = CredentialCache.DefaultCredentials; 

    // Get the response. 
    using (var response = (HttpWebResponse)request.GetResponseWithoutException()) 
    { 
     if (response.StatusCode != HttpStatusCode.OK) 
     { 
      LogError("StatusCode: " + response.StatusCode); 
      return null; 
     } 

     // Get the stream containing content returned by the server. 
     using (var responseStream = response.GetResponseStream()) 
     { 
      if (responseStream == null) 
      { 
       LogError("ResponseStream is null"); 
       return null; 
      } 

      // Open the stream using a StreamReader for easy access. 
      using (var stream = new StreamReader(responseStream)) 
      { 
       // Read the content. 
       var responseFromServer = stream.ReadToEnd(); 
       var beforeBodyStartIndex = responseFromServer.IndexOf("<body", StringComparison.Ordinal); 
       var afterBodyEndIndex = responseFromServer.LastIndexOf("</body>", StringComparison.Ordinal) + 7; 
       var body = responseFromServer.Substring(beforeBodyStartIndex, afterBodyEndIndex - beforeBodyStartIndex); 

       try 
       { 
        var xmlDocument = XElement.Parse(body); 

        var content = xmlDocument.Descendants().FirstOrDefault(o => o.Attribute("id") != null && o.Attribute("id").Value.EndsWith("ContentColumnInner")); 

        if (content == null || !content.HasElements) 
        { 
         return null; 
        } 

        var reader = content.CreateReader(); 
        reader.MoveToContent(); 

        return reader.ReadInnerXml(); 
       } 
       catch (XmlException ex) 
       { 
        LogError("Error parsing xml: " + ex.Message); 
        return null; 
       } 
      } 
     } 
    } 
}