Sharepoint web部件呈现html和控件

Sharepoint web部件呈现html和控件,sharepoint,sharepoint-2007,web-parts,Sharepoint,Sharepoint 2007,Web Parts,我有一个Web部件,它在RenderWebPart方法中显示HTML输出,并在CreateChildControls中创建控件。这两个方法都在Web部件中声明为重写 我的问题是如何控制控件和html输出的显示顺序 此时,我在RenderWebPart方法中调用EnsureChildControls(),以确保创建CreateChildControls中的所有控件,然后呈现html输出 如果我想在页面上显示一个控件,然后是html输出,然后再按该顺序显示下面的另一个控件,该怎么办?我建议将所有静态

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

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

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


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

我建议将所有静态html从呈现函数移到CreateChildControls函数中。如果需要,可以使用
Label
s、
WebControl
s或更好的方法添加常规的旧HTML<代码>文字控件s。然后您可以将它们添加到控件集合中

示例:

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);
WebControl容器=新的WebControl(System.Web.UI.htmltextwittertag.Div);
StringBuilder sb=新的StringBuilder();
某人加上(“
    ”); foreach(此.Children中的节点子节点) { sb.附录格式(“
  • ”,url,名称); } 某人追加(“
”); LiteralControl l=新的LiteralControl(); l、 Text=sb.ToString(); 容器。控件。添加(l);
我建议将所有静态HTML从渲染函数移出,并移到CreateChildControls函数中。如果需要,可以使用
Label
s、
WebControl
s或更好的方法添加常规的旧HTML<代码>文字控件s。然后您可以将它们添加到控件集合中

示例:

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);
WebControl容器=新的WebControl(System.Web.UI.htmltextwittertag.Div);
StringBuilder sb=新的StringBuilder();
某人加上(“
    ”); foreach(此.Children中的节点子节点) { sb.附录格式(“
  • ”,url,名称); } 某人追加(“
”); LiteralControl l=新的LiteralControl(); l、 Text=sb.ToString(); 容器。控件。添加(l);
事实上,我对SharePoint还比较陌生,一开始我非常惊讶,一个人必须手动创建单独的控件,而没有像任何普通ASP.NET web开发那样的GUI界面。然而,我有一个非常好的提示,允许我仍然使用GUI界面,并使用它为Sharepoint创建Web部件。它涉及到在webparts中包装WebUserControl

我使用的链接如下:

基本上,您可以在网站中创建WebUserControls(.ascx文件),因此您可以像任何普通的.aspx页面一样添加控件。您还可以有一个普通的代码隐藏文件(.ascx.cs)。然后将.ascx文件拖到.aspx文件上,以便它随后使用WebUserControl。当.ascx文件准备就绪并生成后,您可以将其复制到SharePoint服务器12配置单元中的Layouts目录。最好在其中创建一个子目录,以避免与其中已有的其他文件发生冲突

然后,您需要创建一个单独的类库项目,该项目将显示您的Web部件代码。然后告诉Web部件使用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部分

希望有帮助


Ash

事实上,我对SharePoint还比较陌生,一开始我非常惊讶,一个人必须手动创建单独的控件,而没有像任何普通ASP.NET web开发那样的GUI界面。然而,我有一个非常好的提示,允许我仍然使用GUI界面,并使用它为Sharepoint创建Web部件。它涉及到在webparts中包装WebUserControl

我使用的链接如下:

基本上,您可以在网站中创建WebUserControls(.ascx文件),因此您可以像任何普通的.aspx页面一样添加控件。您还可以有一个普通的代码隐藏文件(.ascx.cs)。然后将.ascx文件拖到.aspx文件上,以便它随后使用WebUserControl。当.ascx文件准备就绪并生成后,您可以将其复制到SharePoint服务器12配置单元中的Layouts目录。最好在其中创建一个子目录,以避免与其中已有的其他文件发生冲突

然后,您需要创建一个单独的类库项目,该项目将显示您的Web部件代码。然后告诉Web部件使用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部分

希望有帮助

灰烬