【问题标题】:Sharepoint web parts Rendering html and controlsSharepoint Web 部件渲染 html 和控件
【发布时间】:2011-01-07 16:30:45
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: sharepoint sharepoint-2007 web-parts


    【解决方案1】:

    我建议将所有静态 HTML 从 Render 函数中移到 CreateChildControls 函数中。如果需要,您可以使用Labels、WebControls 甚至更好的...LiteralControls 添加常规的旧 HTML。然后您可以将它们添加到您的控件集合中。

    示例:

    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);
    

    【讨论】:

      【解决方案2】:

      实际上,我对 SharePoint 还比较陌生,一开始我非常惊讶,必须手动创建单独的控件,而无需像任何普通的 ASP.NET Web 开发所涉及的 GUI 界面。但是,我有一个非常非常的好技巧,它允许我仍然使用 GUI 界面,并使用它为 Sharepoint 创建 webpart。它涉及将 WebUserControls 包装在 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 使用布局目录中的 .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 添加到共享点服务器的 BIN 目录(c:\inetpub\wwwroot\wss\ 等)。顺便说一下,您不必将其编译到 GAC。

      然后你在你的共享点服务器的 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 部分。

      希望对您有所帮助。

      灰

      【讨论】:

        猜你喜欢
        • 2012-02-07
        • 2013-07-25
        • 1970-01-01
        • 2011-09-27
        • 2011-06-16
        • 1970-01-01
        • 2010-11-02
        • 1970-01-01
        相关资源
        最近更新 更多