WebPartManager.CreateWebPart(Control) 方法

定義

將非 WebPart 控制項的伺服器控制項包裝在 GenericWebPart 物件中,讓此控制項有 Web 組件功能。

public:
 virtual System::Web::UI::WebControls::WebParts::GenericWebPart ^ CreateWebPart(System::Web::UI::Control ^ control);
public virtual System.Web.UI.WebControls.WebParts.GenericWebPart CreateWebPart (System.Web.UI.Control control);
abstract member CreateWebPart : System.Web.UI.Control -> System.Web.UI.WebControls.WebParts.GenericWebPart
override this.CreateWebPart : System.Web.UI.Control -> System.Web.UI.WebControls.WebParts.GenericWebPart
Public Overridable Function CreateWebPart (control As Control) As GenericWebPart

參數

control
Control

WebPart 控制項的伺服器控制項。

傳回

GenericWebPart,用來包裝 control 並使其如同真正 WebPart 控制項作用。

範例

下列程式碼範例示範如何使用 CreateWebPart 方法。 在 中 Button2_Click method ,會 CreateWebPart 呼叫 方法,在將控制項新增至區域之前,先將 控制項包裝 CalendarGenericWebPart 成 物件。

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

  protected void Button2_Click(object sender, EventArgs e)
  {
    WebPartManager mgr = WebPartManager1;
    Calendar cal = new Calendar();
    cal.ID = "cal1";
    GenericWebPart calWebPart = mgr.CreateWebPart(cal);
    mgr.AddWebPart(calWebPart, WebPartZone1, 1);
  }

  protected void Button1_Click(object sender, EventArgs e)
  {
    if (WebPartZone1.WebParts.Count > 1)
    {
      WebPart cal = WebPartZone1.WebParts[1];
      if (cal.Controls[0].GetType().Name == "Calendar" 
        && cal != null)
        WebPartManager1.DeleteWebPart(cal);
    }

  }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Adding a Server Control</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <asp:WebPartManager ID="WebPartManager1" 
        runat="server" />
      <asp:WebPartZone ID="WebPartZone1" runat="server">
        <ZoneTemplate>
          <asp:BulletedList  
            DisplayMode="HyperLink" 
            ID="BulletedList1" 
            runat="server"
            Title="My Links">
            <asp:ListItem Value="http://www.microsoft.com">
            Microsoft
            </asp:ListItem>
            <asp:ListItem Value="http://www.msn.com">
            MSN
            </asp:ListItem>
            <asp:ListItem Value="http://www.contoso.com">
            Contoso Corp.
            </asp:ListItem>
          </asp:BulletedList>
        </ZoneTemplate>
      </asp:WebPartZone>
      <asp:Button ID="Button1" runat="server" 
        Text="Delete Calendar" 
        OnClick="Button1_Click" />
      <asp:Button ID="Button2" runat="server" 
        Text="Add Calendar" 
        OnClick="Button2_Click" />
    </div>
    </form>
</body>
</html>
<%@ Page Language="vb" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

  Protected Sub Button2_Click(ByVal sender As Object, _
    ByVal e As System.EventArgs)
    Dim mgr As WebPartManager = WebPartManager1
    Dim cal As New Calendar()
    cal.ID = "cal1"
    Dim calWebPart As GenericWebPart = mgr.CreateWebPart(cal)
    mgr.AddWebPart(calWebPart, WebPartZone1, 1)
  End Sub

  Protected Sub Button1_Click(ByVal sender As Object, _
    ByVal e As System.EventArgs)

    If WebPartZone1.WebParts.Count > 1 Then
      Dim cal As WebPart = WebPartZone1.WebParts(1)
      If cal.Controls(0).GetType().Name = "Calendar" AndAlso _
        cal IsNot Nothing Then
        WebPartManager1.DeleteWebPart(cal)
      End If
    End If
  End Sub
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Adding a Server Control</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <asp:WebPartManager ID="WebPartManager1" 
        runat="server" />
      <asp:WebPartZone ID="WebPartZone1" runat="server">
        <ZoneTemplate>
          <asp:BulletedList  
            DisplayMode="HyperLink" 
            ID="BulletedList1" 
            runat="server"
            Title="My Links">
            <asp:ListItem Value="http://www.microsoft.com">
            Microsoft
            </asp:ListItem>
            <asp:ListItem Value="http://www.msn.com">
            MSN
            </asp:ListItem>
            <asp:ListItem Value="http://www.contoso.com">
            Contoso Corp.
            </asp:ListItem>
          </asp:BulletedList>
        </ZoneTemplate>
      </asp:WebPartZone>
      <asp:Button ID="Button1" runat="server" 
        Text="Delete Calendar" 
        OnClick="Button1_Click" />
      <asp:Button ID="Button2" runat="server" 
        Text="Add Calendar" 
        OnClick="Button2_Click" />
    </div>
    </form>
</body>
</html>

備註

方法是 CreateWebPart 讓不是 WebPart 控制項的伺服器控制項採用與控制項相同的功能 WebPart ,進而完全參與網頁元件應用程式的主要機制。 藉由使用此方法,開發人員會大幅擴充可在 Web 元件應用程式中使用的伺服器控制項數目,因為幾乎可以使用任何類型的伺服器控制項-標準 ASP.NET 控制項、使用者控制項和自訂控制項。

控制項 WebPartManager 在其他兩個 GenericWebPart 案例中也會使用這個方法,將伺服器控制項包裝成 物件。 當使用者使用 ImportCatalogPart 控制項將伺服器控制項新增至頁面時,如果匯入的控制項不是 WebPart 控制項,則會 CreateWebPart 呼叫 方法。 此外,當伺服器控制項以網頁區域 WebPartZoneBase 內的持續性格式宣告時, CreateWebPart 會針對不是 WebPart 控制項的任何控制項呼叫 方法。

當您以程式設計方式將伺服器控制項新增至區域時,一般方法是使用 CreateWebPart 方法將控制項包裝 GenericWebPart 成 物件,然後呼叫 AddWebPart 方法,將控制項新增至頁面上所有 WebPart 控制項的集合,該控制項是由 WebParts 屬性所參考。

給繼承者的注意事項

您可以覆寫這個方法,以使用衍生 GenericWebPart 類別,而不是 Web 元件控制項集所提供的基類。

適用於

另請參閱