Sharepoint Web部件渲染html和控件

时间:2010-01-21 10:45:50

标签: sharepoint sharepoint-2007 web-parts

我有一个webpart,它在RenderWebPart方法中显示HTML输出,并且还在CreateChildControls中创建控件,这两个方法在webpart中被声明为重写。

我的问题是如何控制控件和html输出的显示顺序?

目前我在RenderWebPart方法中调用EnsureChildControls()以确保创建CreateChildControls中的所有控件,然后然后呈现html输出。

如果我想在页面上显示一个控件然后html输出然后按照该顺序显示下面的另一个控件怎么办?

2 个答案:

答案 0 :(得分:4)

我建议将所有静态HTML移出Render函数并移入CreateChildControls函数。如果需要,您可以使用LabelWebControl或更好的LiteralControl s添加常规旧HTML。然后你可以将它们添加到Controls集合中。

示例:

WebControl container = new WebControl(System.Web.UI.HtmlTextWriterTag.Div);
StringBuilder sb = new StringBuilder();
sb.Append("<ul>");
foreach (Node child in this.Children)
{
    sb.AppendFormat("<li><a href=\"{0}\">{1}</a></li>", url, name);
}
sb.Append("</ul>");
LiteralControl l = new LiteralControl();
l.Text = sb.ToString();
container.Controls.Add(l);

答案 1 :(得分:0)

我实际上是相对较新的SharePoint,我最初非常惊讶,必须手动创建单独的控件,没有像任何正常的ASP.NET Web开发所涉及的GUI界面。但是,我有一个非常非常好的提示,允许我仍然使用GUI界面,并使用它为Sharepoint创建webparts。它涉及将WebUserControl包装在webparts中。

我使用的链接在这里:http://www.a2zdotnet.com/View.aspx?id=95

您基本上在网站中创建WebUserControls(.ascx文件),因此您可以像任何正常的.aspx页面一样添加控件。您还可以拥有一个普通的代码隐藏文件(.ascx.cs)。然后将.ascx文件拖到.aspx文件中,以便它将使用您的WebUserControl。准备好并生成.ascx文件后,将它们复制到SharePoint Server的12-Hive中的Layouts目录。最好在那里创建一个子目录,以避免与其中的其他文件发生冲突。

然后,您需要创建一个单独的类库项目,该项目将包含您的WebPart代码。然后,告诉WebPart在layouts目录中使用.ascx文件。像这样:

protected override void  CreateChildControls()
    {
        base.CreateChildControls();
        try
        {
            this.Controls.Clear();
            _myControl = this.Page.LoadControl("\\_layouts\\MyFolder\\WebUserControl.ascx");
            this.Controls.Add(_myControl);
        }
        catch (Exception e)
        {
            err = e.Message;
        }

我上面提供的链接提供了更多信息,但基本上你编译了webpart项目,然后将DLL添加到你的sharepoint服务器的 BIN 目录(c:\ inetpub \ wwwroot \ wss \ etc) )。顺便说一句,您不必将其编译为 GAC

然后在sharepoint服务器的web.config中添加一个条目:

<SafeControl Assembly="MyWebUserControl, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9f4da00116c38ec5" Namespace="MyWebUserControl" TypeName="*" Safe="True" />

如果你没有将DLL编译到GAC,而是 BIN ,则只需要:

<SafeControl Assembly="UserControl" Namespace="UserControl" TypeName="*" Safe="True" />

同样,我上面发布的链接将它写在代码中,这是对GUID的引用,只有在将DLL放入GAC时才需要。如果只放在BIN目录中,则不需要代码的GUID部分。

希望有所帮助。