возможно отобразить конкретную страницу в функции бритвы. Я попробовал @RenderPage, но я не могу определить путь. Есть ли встроенные функции для выполнения этого?Рендеринг дочерней страницы на родительской странице
Благодаря Йохан
возможно отобразить конкретную страницу в функции бритвы. Я попробовал @RenderPage, но я не могу определить путь. Есть ли встроенные функции для выполнения этого?Рендеринг дочерней страницы на родительской странице
Благодаря Йохан
Не очень конкретного подхода C1, но лично мой лучший подход был просто сделать отдельный веб-запрос для данной страницы, разобрать HTML, и сделать это.
Этот код может служить в качестве примера, его 1: 1 того, что я использую. Как вы можете видеть, хитрость заключается в том, чтобы найти элемент, который содержит контент, в моем примере его элемент внутри, который имеет идентификатор равен 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;
}
}
}
}
}