Question

J'ai un site d'édition construction avec MOSS 2007 et je dois obtenir le programme contenu de la page. Je sais que je peux utiliser WebClient à envoyer une requête à la page, puis analyser le texte de réponse. Mais je veux le faire dans le modèle SharePoint depuis l'échelle est assez large.

Le parta web Je veux rendre sont DataFormWebPart et ils affichent bien si affiché dans un navigateur. Mais je reçois des exceptions en essayant de les rendre programme.

Le code:

var partMgr = siteCollection.RootWeb.GetLimitedWebPartManager(pageUrl, PersonalizationScope.Shared);

var sr = new StreamWriter(@"d:\temp\test.txt", false);
var htr = new HtmlTextWriter(sr);

foreach (WebPart part in partMgr.WebParts)
{
    if (part.GetType() == new DataFormWebPart().GetType())
    {
        try
        {
            htr.WriteLine("");
            part.RenderBeginTag(htr);
            htr.WriteLine("");
            part.RenderControl(htr);
            htr.WriteLine("");
            part.RenderEndTag(htr);
            htr.WriteLine("");
        }
        catch (Exception exc)
        {
            htr.WriteLine("Message: " + exc.Message);
            htr.WriteLine("StackTrace: " + exc.StackTrace);
            htr.WriteLine("InnerException: " + (exc.InnerException == null).ToString());
        }
    }
}
sr.Close();
htr.Close();

La sortie:

<div id="g_1722aa69_d0d7_4804_83fa_c8f4a250080a">
    Message: Value cannot be null. Parameter name: page
    StackTrace:    at System.Web.UI.WebControls.WebParts.WebPartManager.GetCurrentWebPartManager(Page page)
   at Microsoft.SharePoint.WebPartPages.WebPart.Render(HtmlTextWriter writer)
   at ExtractPageData.Program.Main(String[] args) in D:\DNR-Playground\ExtractPageData\ExtractPageData\Program.cs:line 49
    InnerException: False

    <div id="g_1115045e_b0d7_41ce_ad19_15aab0f3871d">
        Message: Value cannot be null. Parameter name: page
        StackTrace:    at System.Web.UI.WebControls.WebParts.WebPartManager.GetCurrentWebPartManager(Page page)
   at Microsoft.SharePoint.WebPartPages.WebPart.Render(HtmlTextWriter writer)
   at ExtractPageData.Program.Main(String[] args) in D:\DNR-Playground\ExtractPageData\ExtractPageData\Program.cs:line 49
        InnerException: False

Comme vous pouvez le voir dans la sortie, la balise de début est rendu, mais le contrôle ne peut être rendue en raison de part.Page est null et il est un attribut lecture seule.

Était-ce utile?

La solution

Ce ne va pas fonctionner. parties Web exigent SPContext appropriée qui est configuré lors de la manipulation de requête HTTP dans le pipeline ASP.NET. Il n'y a pas de réponse facile comment surmonter. Vous auriez essentiellement pour simuler une requête HTTP à la page que vous devez rendre en mémoire.


En outre, cette expression est part.GetType() == new DataFormWebPart().GetType() loin d'être idéale. utiliser plutôt part.GetType() == typeof(DataFormWebPart) pour prévenir les effets secondaires indésirables instanciation et possibles.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top