首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何以编程方式呈现DataFormWebPart?

如何以编程方式呈现DataFormWebPart?
EN

Stack Overflow用户
提问于 2012-02-18 04:44:47
回答 1查看 711关注 0票数 0

我有一个与MOSS 2007发布网站建设,我需要以编程方式获得页面内容。我知道我可以使用WebClient向页面发送一个请求,然后解析响应文本。但我想在SharePoint模型中完成,因为它的规模非常大。

我想渲染的web部分是DataFormWebPart,如果在浏览器中查看,它们显示得很好。但在尝试以编程方式呈现它们时,我遇到了异常。

代码:

代码语言:javascript
复制
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();

输出:

代码语言:javascript
复制
<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

正如您在输出中看到的,begin标记被呈现,但控件无法呈现,因为part.Pagenull,并且它是一个只读属性。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-18 05:27:54

这是行不通的。Web部件需要正确的SPContext,它是在ASP.NET管道中处理HTTP请求时设置的。如何克服它并没有简单的答案。实际上,您必须模拟对需要在内存中呈现的页面的HTTP请求。

此外,part.GetType() == new DataFormWebPart().GetType()这个表达式也很不理想。而是使用part.GetType() == typeof(DataFormWebPart)来防止实例化和可能的副作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9335145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档