2014-11-05 146 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; 
       } 
      } 
     } 
    } 
}