2010-08-16 52 views
0

我写一个web部件,并试图更新浏览器标题...所以,我走进mywebpart.ascx内容控制增加了以下内容:如何界定通过C#代码

<asp:Content ID="contentPageTitle" ContentPlaceholderID="PlaceHolderPageTitle" runat="server"> 
    <%= SPContext.Current.Site.OpenWeb().Title %> 
</asp:Content> 

后来我此错误: 内容控件必须是内容页面或引用母版页的嵌套母版页中的顶级控件。

所以,我想以编程方式做到这一点在mywebpart.cs做:

Content content = new Content(); 
content.ContentPlaceHolderID = "PlaceHolderPageTitle"; 

我现在需要输入这片:SPContext.Current.Site.OpenWeb()标题

Content控件中的哪些属性允许我这样做?如果有更好的方法来做到这一点,我也是开放的。谢谢。

回答

0

不幸的是,你不能在用户控件中放置一个内容控件。如错误消息所示,内容控件必须是页面或母版页中的顶级控件,并且不能属于任何其他类型的控件。

另一种方法可能是定制您的页面布局或母版页以包含您想要提供的逻辑。

在 -

var content = Page.FindControl("contentPageTitle"); 
content.Controls.Add(new LiteralControl("Hello, World!")); 

如果你有内容控制(不是ContentPlaceholderID,请不要忘记)的ID的一些保证,那么你可以与内容控制,像这样互动另外,请确保任何使用OpenWeb()打开的SPWeb得到妥善处理,否则您可能会面临内存管理问题。

+0

感谢您的宝贵意见。在旁注中,我是否应该处置所有SPWeb对象?我通常使用“使用”,但由于我们谈论的话题,你能告诉我应该处理哪些对象吗? – Josh 2010-08-16 20:34:52

+0

以下是SPWeb处理的一些指导原则。我建议在你的代码中使用SPDisposeCheck。 http://blogs.technet.com/b/stefan_gossner/archive/2008/12/05/disposing-spweb-and-spsite-objects.aspx – kbrimington 2010-08-16 21:14:31