Share via


WebPartManager.IPersonalizable.IsDirty Özellik

Tanım

Denetim tarafından yönetilen özel kişiselleştirme durumu verilerinin WebPartManager bir Web sayfasında değişip değişmediğini gösteren bir değer alır.

property bool System::Web::UI::WebControls::WebParts::IPersonalizable::IsDirty { bool get(); };
bool System.Web.UI.WebControls.WebParts.IPersonalizable.IsDirty { get; }
member this.System.Web.UI.WebControls.WebParts.IPersonalizable.IsDirty : bool
 ReadOnly Property IsDirty As Boolean Implements IPersonalizable.IsDirty

Özellik Değeri

Kişiselleştirme durumu verilerinin değişip değişmediğini gösteren boole değeri.

Uygulamalar

Örnekler

Aşağıdaki kod örneği, bir denetimin kişiselleştirme verilerinin IPersonalizable.IsDirty değişmesine neden olan bazı ortak sayfa kişiselleştirme örneklerini göstermek için özelliğinin basit bir WebPartManager kullanımını gösterir.

Kod örneğinin dört bölümü vardır:

  • Web Bölümleri denetimleri içeren bir sayfada görüntüleme modlarını değiştirmenize olanak tanıyan bir kullanıcı denetimi.

  • Bağlanabilen iki özel WebPart denetimin kodunu ve bir arabirimini içeren bir kaynak dosyası.

  • Tüm denetimleri barındıran bir Web sayfası.

  • Kod örneğinin nasıl çalıştığını gösteren açıklama.

Kod örneğinin ilk bölümü, görüntüleme modlarını değiştirmeye yönelik kullanıcı denetimidir. Kullanıcı denetimi için kaynak kodunu sınıfa genel bakışın Örnek bölümünden WebPartManager alabilirsiniz. Görüntüleme modları ve kullanıcı denetiminin nasıl çalıştığı hakkında bilgi için bkz . İzlenecek Yol: Web Bölümleri Sayfasında Görüntüleme Modlarını Değiştirme.

Örneğin ikinci bölümü, özel denetimlere ve arabirimine sahip kaynak dosyadır. Arabirimin IZipCode tek bir yöntemi kullanıma sağladığına ve özel ZipCodeWebPart denetimde uygulanan bu yöntemin bir bağlantı senaryosunda sağlayıcı olarak davranmayı etkinleştirmek ZipCodeWebPart için bir geri çağırma yöntemi olarak hizmet olduğuna dikkat edin. Diğer denetim olan WeatherWebPart, bir bağlantıda tüketici denetimi işlevi görür; tarafından ZipCodeWebPartsağlanan belirli arabirimi kullanabilir. Gerçek bir uygulamada, WeatherWebPart sağlayıcıdan kişiselleştirilmiş bir Posta Kodu değeri kullanabilir ve ardından kullanıcılara grafik hava durumu bilgileri sağlayabilir.

Kod örneğinin çalışması için bu kaynak kodunu derlemeniz gerekir. Bunu açıkça derleyebilir ve sonuçta elde edilen derlemeyi Web sitenizin Bin klasörüne veya genel derleme önbelleğine yerleştirebilirsiniz. Alternatif olarak, kaynak kodu sitenizin App_Code klasörüne koyabilirsiniz; burada çalışma zamanında dinamik olarak derlenir. Bu kod örneği dinamik derleme kullanır; Bu nedenle, Web sayfasının üst kısmındaki bu bileşen için yönergesinin yalnızca ve Namespace öznitelikleri içerdiğine ve öznitelikleri Assembly içerdiğine TagPrefix dikkat edinRegister. Derlemeyi gösteren bir izlenecek yol için bkz . İzlenecek Yol: Özel Web Sunucusu Denetimi Geliştirme ve Kullanma.

namespace Samples.AspNet.CS.Controls
{
  using System;
  using System.Web;
  using System.Web.Security;
  using System.Security.Permissions;
  using System.Web.UI;
  using System.Web.UI.WebControls;
  using System.Web.UI.WebControls.WebParts;

  [AspNetHostingPermission(SecurityAction.Demand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  [AspNetHostingPermission(SecurityAction.InheritanceDemand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  public interface IZipCode
  {
    string ZipCode { get; set;}
  }

  [AspNetHostingPermission(SecurityAction.Demand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  [AspNetHostingPermission(SecurityAction.InheritanceDemand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  public class ZipCodeWebPart : WebPart, IZipCode
  {
    string zipCodeText = String.Empty;
    TextBox input;
    Button send;

    public ZipCodeWebPart()
    {
    }

    // Make the implemented property personalizable to save 
    // the Zip Code between browser sessions.
    [Personalizable()]
    public virtual string ZipCode
    {
      get { return zipCodeText; }
      set { zipCodeText = value; }
    }

    // This is the callback method that returns the provider.
    [ConnectionProvider("Zip Code", "ZipCodeProvider")]
    public IZipCode ProvideIZipCode()
    {
      return this;
    }

    protected override void CreateChildControls()
    {
      Controls.Clear();
      input = new TextBox();
      this.Controls.Add(input);
      send = new Button();
      send.Text = "Enter 5-digit Zip Code";
      send.Click += new EventHandler(this.submit_Click);
      this.Controls.Add(send);
    }

    private void submit_Click(object sender, EventArgs e)
    {
      if (!string.IsNullOrEmpty(input.Text))
      {
        zipCodeText = Page.Server.HtmlEncode(input.Text);
        input.Text = String.Empty;
      }
    }
  }

  [AspNetHostingPermission(SecurityAction.Demand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  [AspNetHostingPermission(SecurityAction.InheritanceDemand,
    Level = AspNetHostingPermissionLevel.Minimal)]
  public class WeatherWebPart : WebPart
  {
    private IZipCode _provider;
    string _zipSearch;
    Label DisplayContent;

    // This method is identified by the ConnectionConsumer 
    // attribute, and is the mechanism for connecting with 
    // the provider. 
    [ConnectionConsumer("Zip Code", "ZipCodeConsumer")]
    public void GetIZipCode(IZipCode Provider)
    {
      _provider = Provider;
    }
    
    protected override void OnPreRender(EventArgs e)
    {
      EnsureChildControls();

      if (this._provider != null)
      {
        _zipSearch = _provider.ZipCode.Trim();
        DisplayContent.Text = "My Zip Code is:  " + _zipSearch;
      }
    }

    protected override void CreateChildControls()
    {
      Controls.Clear();
      DisplayContent = new Label();
      this.Controls.Add(DisplayContent);
    }
  }
}
Imports System.Web
Imports System.Web.Security
Imports System.Security.Permissions
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts

Namespace Samples.AspNet.VB.Controls

  <AspNetHostingPermission(SecurityAction.Demand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  <AspNetHostingPermission(SecurityAction.InheritanceDemand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  Public Interface IZipCode

    Property ZipCode() As String

  End Interface

  <AspNetHostingPermission(SecurityAction.Demand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  <AspNetHostingPermission(SecurityAction.InheritanceDemand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  Public Class ZipCodeWebPart
    Inherits WebPart
    Implements IZipCode
    Private zipCodeText As String = String.Empty
    Private input As TextBox
    Private send As Button

    Public Sub New()
    End Sub

    ' Make the implemented property personalizable to save 
    ' the Zip Code between browser sessions.
    <Personalizable()> _
    Public Property ZipCode() As String _
      Implements IZipCode.ZipCode

      Get
        Return zipCodeText
      End Get
      Set(ByVal value As String)
        zipCodeText = value
      End Set
    End Property

    ' This is the callback method that returns the provider.
    <ConnectionProvider("Zip Code", "ZipCodeProvider")> _
    Public Function ProvideIZipCode() As IZipCode
      Return Me
    End Function


    Protected Overrides Sub CreateChildControls()
      Controls.Clear()
      input = New TextBox()
      Me.Controls.Add(input)
      send = New Button()
      send.Text = "Enter 5-digit Zip Code"
      AddHandler send.Click, AddressOf Me.submit_Click
      Me.Controls.Add(send)

    End Sub


    Private Sub submit_Click(ByVal sender As Object, _
      ByVal e As EventArgs)

      If input.Text <> String.Empty Then
        zipCodeText = Page.Server.HtmlEncode(input.Text)
        input.Text = String.Empty
      End If

    End Sub

  End Class

  <AspNetHostingPermission(SecurityAction.Demand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  <AspNetHostingPermission(SecurityAction.InheritanceDemand, _
    Level:=AspNetHostingPermissionLevel.Minimal)> _
  Public Class WeatherWebPart
    Inherits WebPart
    Private _provider As IZipCode
    Private _zipSearch As String
    Private DisplayContent As Label

    ' This method is identified by the ConnectionConsumer 
    ' attribute, and is the mechanism for connecting with 
    ' the provider. 
    <ConnectionConsumer("Zip Code", "ZipCodeConsumer")> _
    Public Sub GetIZipCode(ByVal Provider As IZipCode)
      _provider = Provider
    End Sub


    Protected Overrides Sub OnPreRender(ByVal e As EventArgs)
      EnsureChildControls()

      If Not (Me._provider Is Nothing) Then
        _zipSearch = _provider.ZipCode.Trim()
                DisplayContent.Text = "My Zip Code is:  " + _zipSearch
      End If

    End Sub

    Protected Overrides Sub CreateChildControls()
      Controls.Clear()
      DisplayContent = New Label()
      Me.Controls.Add(DisplayContent)

    End Sub

  End Class

End Namespace

Kod örneğinin üçüncü bölümü Web sayfasıdır. İlki iki özel WebPart denetimi içeren iki WebPartZone bölge içerdiğine dikkat edin. Ayrıca, kullanıcıların sayfaya ekleyebilecekleri standart Calendar bir denetim içeren bir CatalogZone bölge de vardır. <asp:connectionszone> öğesi, kullanıcıların denetimler arasında bağlantı oluşturması için bir bağlantı kullanıcı arabirimi sağlar. yönteminde Page_PreRender , kişiselleştirme verilerinin değişip değişmediğini denetlediğine ve değişmişse metnini Label1güncelleştirdiğine dikkat edin.

<%@ Page Language="C#" %>
<%@ Register TagPrefix="uc1" 
    TagName="DisplayModeMenuCS"
    Src="~/displaymodemenucs.ascx" %>
<%@ Register TagPrefix="aspSample" 
    Namespace="Samples.AspNet.CS.Controls" %>
    
<!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 Page_PreRender(object sender, EventArgs e)
  {
    // Clear the label if it has a previously set value.
    Label1.Text = String.Empty;
    
    // Cast the WebPartManager to the IPersonalizable interface 
    // so that you can access the property.  
    IPersonalizable stateData = (IPersonalizable)mgr1;
    if (stateData.IsDirty)
      Label1.Text = "WebPartManager personalization data is dirty.";
  }
    
  protected void Button1_Click(object sender, EventArgs e)
  {
    ProviderConnectionPoint provPoint = 
      mgr1.GetProviderConnectionPoints(zip1)["ZipCodeProvider"];
    ConsumerConnectionPoint connPoint = 
      mgr1.GetConsumerConnectionPoints(weather1)["ZipCodeConsumer"];
    WebPartConnection conn1 = mgr1.ConnectWebParts(zip1, provPoint,
      weather1, connPoint);
  }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <asp:WebPartManager ID="mgr1" runat="server" />
      <uc1:DisplayModeMenuCS ID="menu1" runat="server" />
      <asp:WebPartZone ID="WebPartZone1" runat="server">
        <ZoneTemplate>
          <aspSample:ZipCodeWebPart ID="zip1" runat="server"
            Title="Zip Code Provider" />
          <aspSample:WeatherWebPart ID="weather1" runat="server" 
            Title="Zip Code Consumer" />
        </ZoneTemplate>
      </asp:WebPartZone>
      <asp:WebPartZone ID="WebPartZone2" runat="server">
        <ZoneTemplate>
        </ZoneTemplate>
      </asp:WebPartZone>
      <asp:CatalogZone ID="CatalogZone1" runat="server">
        <ZoneTemplate>
          <asp:DeclarativeCatalogPart ID="DeclarativeCatalogPart1" 
            runat="server">
            <WebPartsTemplate>
              <asp:Calendar ID="Calendar1" runat="server" 
                Title="My Calendar" />
            </WebPartsTemplate>
          </asp:DeclarativeCatalogPart>
          <asp:PageCatalogPart ID="PageCatalogPart1" runat="server" />
        </ZoneTemplate>
      </asp:CatalogZone>
      <asp:ConnectionsZone ID="ConnectionsZone1" runat="server" />
      <asp:Button ID="Button1" runat="server" 
        Text="Connect WebPart Controls" 
        OnClick="Button1_Click" />
      <hr />
      <asp:Label ID="Label1" runat="server" 
        Text="" 
        Font-Bold="true" />
    </div>
    </form>
</body>
</html>
<%@ Page Language="vb" %>
<%@ Register TagPrefix="uc1" 
    TagName="DisplayModeMenuVB"
    Src="~/displaymodemenuvb.ascx" %>
<%@ Register TagPrefix="aspSample" 
    Namespace="Samples.AspNet.VB.Controls" %>
    
<!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 Page_PreRender(ByVal sender As Object, _
    ByVal e As System.EventArgs)
    
    ' Clear the label if it has a previously set value.
    Label1.Text = String.Empty
    
    ' Cast the WebPartManager to the IPersonalizable interface 
    ' so that you can access the property.
    Dim stateData As IPersonalizable = CType(mgr1, IPersonalizable)
    If stateData.IsDirty Then
      Label1.Text = "WebPartManager personalization data is dirty."
    End If
    
  End Sub
    
  Protected Sub Button1_Click(ByVal sender As Object, _
    ByVal e As System.EventArgs)

    Dim provPoint As ProviderConnectionPoint = _
      mgr1.GetProviderConnectionPoints(zip1)("ZipCodeProvider")
    Dim connPoint As ConsumerConnectionPoint = _
      mgr1.GetConsumerConnectionPoints(weather1)("ZipCodeConsumer")
    Dim conn1 As WebPartConnection = _
      mgr1.ConnectWebParts(zip1, provPoint, weather1, connPoint)
      
  End Sub

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <asp:WebPartManager ID="mgr1" runat="server" />
      <uc1:DisplayModeMenuVB ID="menu1" runat="server" />
      <asp:WebPartZone ID="WebPartZone1" runat="server">
        <ZoneTemplate>
          <aspSample:ZipCodeWebPart ID="zip1" runat="server"
            Title="Zip Code Provider" />
          <aspSample:WeatherWebPart ID="weather1" runat="server" 
            Title="Zip Code Consumer" />
        </ZoneTemplate>
      </asp:WebPartZone>
      <asp:WebPartZone ID="WebPartZone2" runat="server">
        <ZoneTemplate>
        </ZoneTemplate>
      </asp:WebPartZone>
      <asp:CatalogZone ID="CatalogZone1" runat="server">
        <ZoneTemplate>
          <asp:DeclarativeCatalogPart ID="DeclarativeCatalogPart1" 
            runat="server">
            <WebPartsTemplate>
              <asp:Calendar ID="Calendar1" runat="server" 
                Title="My Calendar" />
            </WebPartsTemplate>
          </asp:DeclarativeCatalogPart>
          <asp:PageCatalogPart ID="PageCatalogPart1" runat="server" />
        </ZoneTemplate>
      </asp:CatalogZone>
      <asp:ConnectionsZone ID="ConnectionsZone1" runat="server" />
      <asp:Button ID="Button1" runat="server" 
        Text="Connect WebPart Controls" 
        OnClick="Button1_Click" />
      <hr />
      <asp:Label ID="Label1" runat="server" 
        Text="" 
        Font-Bold="true" />
    </div>
    </form>
</body>
</html>

Sayfayı bir tarayıcıya yükledikten sonra, bu konunun Açıklamalar bölümünde listelenen ve kişiselleştirme verilerini değiştirecek senaryolardan bazılarını oluşturmayı deneyin. Çeşitli değişiklikler yaptığınızda, bir değişiklik denetim tarafından izlenen kişiselleştirme senaryolarından birini içerdiğinde WebPartManager , kişiselleştirme verilerinin Label1 değiştiğini belirtmek için denetimin metni görüntülenir. Örneğin, şunları yapabilirsiniz:

  • Web Bölümü Denetimlerini Bağla düğmesine tıklayarak denetimler arasında bağlantı oluşturun.

  • Sayfayı katalog moduna geçmek için Görüntü Modu açılan liste denetimini kullanın ve Takvimim denetimini ikinci WebPartZone bölgeye ekleyin.

  • Sayfayı yeniden göz atma moduna geçirin, Takvimim denetiminin fiiller menüsüne (başlık çubuğunda ok simgesiyle gösterilir) tıklayın ve kapatmak ve sayfa kataloğuna eklemek için Kapat'ı seçin.

  • Sayfayı katalog moduna döndürerek Takvimim denetimini sayfaya geri ekleyin.

  • Sayfayı tasarım moduna geçmek için Görüntü Modu denetimini kullanın ve bir veya daha fazlasını başka bir bölgeye veya aynı bölgede farklı bir konuma sürükleyerek denetimlerin düzenini yeniden düzenleyin.

Açıklamalar

özelliği, IPersonalizable.IsDirty çağıranların denetim tarafından yönetilen kişiselleştirme durumu verilerinin değişip değişmediğini belirlemesi WebPartManager için bir yol sağlar. Kullanıcılar sayfa düzenini değiştirerek, bağlantıları oluşturarak veya silerek ve denetim ekleyerek veya silerek sayfa düzeyi ayrıntılarını kişiselleştirdiğinde, denetim tarafından WebPartManager yönetilen kişiselleştirme verileri değişir. Bu, çağıranlara çağıranlar tarafından doğrudan erişilemeyen korumalı IsCustomPersonalizationStateDirty özelliğin değerini döndüren bir geçiş yöntemidir.

Not

IPersonalizable.IsDirty özelliği, kişiselleştirilebilir özellik değerlerinin veya tek tek denetimlerin görünümünü etkileyen tek tek WebPart özelliklerin değişip değişmediğini göstermez. Denetim düzeyi kişiselleştirme, her denetim için ayrı ayrı izlenir. IPersonalizable.IsDirty özelliği yalnızca sayfa düzeyinde olan ve denetim tarafından yönetilen kişiselleştirme verilerinin WebPartManager değişip değişmediğini gösterir.

Aşağıdaki listede, özelliğinin değerini truedöndürmesine neden olan ve denetimin IPersonalizable.IsDirty bazı kişiselleştirme verilerini değiştirdiğini WebPartManager belirten bazı yaygın kişiselleştirme örnekleri açıklanmaktadır:

  • Sayfadaki statik WebPart denetimi (veya sunucu veya kullanıcı denetimini) kapatma.

  • Kapalı statik WebPart denetimi sayfa kataloğundan sayfaya geri yükleme.

  • Herhangi bir denetimi kendi bölgesi içinde veya başka bir bölgeye taşıma.

  • veya sunucu denetimleri kataloğundan WebPart denetim ekleme veya program aracılığıyla denetim ekleme.

  • Program aracılığıyla veya bağlantı kullanıcı arabirimini (UI) kullanarak iki WebPart denetim arasında bağlantı oluşturma.

  • program aracılığıyla veya bağlantı kullanıcı arabirimini kullanarak iki WebPart denetim arasındaki bağlantıyı silme.

Bu özellik değerine erişmek için denetim örneğini WebPartManager arabirimine IPersonalizable atamanız gerekir; daha sonra özellik değerini okuyabilirsiniz IsDirty .

Şunlara uygulanır

Ayrıca bkz.