Son zamanlarda üzerinde çalıştığım projelerde Microsoft'un WebPart kontrolleriyle fazla haşır neşir olmak durumunda kaldım ve açıkcası Microsoft'un bu konuyu çok aceleye getirdiği ve üzerinde fazla çalışmadan sürüme yetiştirmeye çalıştığını düşünmeye başladım. Bunun sebebi bir çok Microsoft kontrolünün aksine, WebPart kontrollerinin özelleştirilme yeteneğinin oldukça sınırlı olması. En ufak değişiklik istediğinizde, kontolü baştan yazmak durumunda kalabiliyorsunuz. Örnek vermek gerekirse, en son projemizde ekip olarak WebPart Base, Chrome, Manager, Zone ve EditorZone'u sınıflarla genişletmek durumunda kaldık, geriye ne kaldı ki zaten dediğinizi duyar gibiyim :). Kod kısmında yazılımcı olarak bu sorunları yaşarken, html render şekli yüzünden grafiker arkadaşlarımın sorun yaşadığını gözlemlediğimi de ekleyeyim.
WebPart’ları yeterince kötülediğimize göre artık Custom EditorPart nasıl yazılır kısmına geçebiliriz. WebPart dediğimiz şeyin en güzel özelliklerinden biri, farklı bir sayfaya geçmeye gerek kalmadan, direk mevcut part’ın üzerinden o part’a özel ayarları değiştirebilmemiz. YouTube, BBC gibi dünyaca ünlü bir çok site bu akımı başarıyla uyguluyorlar. Kendiniz de bu güzelliği sitenizde kullanmak isterseniz Microsoft’un sunduğu çözüm sizi bir yere kadar sorunsuz götürüyor, ama ilk paragrafta da bahsettiğim gibi mevcut EditorPart’lar çok kısıtlı özelliklere sahip.
İşe Custom EditorPart’ımızın içinde bulunacağı bir sınıf yaratarak başlıyoruz. Sınıfımız doğal olarak EditorPart’dan miras alacak ve “ApplyChanges, SyncChanges” methodlarını içerecek. Custom EditorPart’ımızın nasıl görüneceğini ayarlamak için de ekstadan "CreateChildControls" methodunu ezeceğiz:
public class TitleEditorPart : EditorPart
{
private TextBox tbTitle;
protected override void CreateChildControls()
{
Label lblTitle = new Label();
lblTitle.Text = "Düzenlediğiniz Alanın Başlığı:";
Controls.Add(lblTitle);
tbTitle = new TextBox();
tbTitle.ID = "tbWebPartTitle";
Controls.Add(tbTitle);
ChildControlsCreated = true;
}
public override bool ApplyChanges()
{
EnsureChildControls();
WebPartToEdit.Title = tbTitle.Text;
return true;
}
public override void SyncChanges()
{
EnsureChildControls();
tbTitle.Text = WebPartToEdit.Title;
}
}
Örnekte WebPart’ın Title özelliğini değiştiren bir EditorPart bulunuyor. Kontrolümüz içerisinde sadece bir Label bir de TextBox mevcut. Buraya isterseniz bir DropDownList koyabilir, ya da olası başlıkları bir RadioButtonList’ten seçtirebilirsiniz, kendi EditorPart’ımızı yazmamızın güzelliği zaten burası.
Kontrolümüzü kullanacağımız sayfaya register ediyoruz:
<%@ Register Namespace="CustomEditorPart.App_Code" TagPrefix="cc1" %>
Son olarak da EditorZone’umuza CustomEditorPart’ımızı ekliyoruz:
<asp:EditorZone ID="EditorZone1" runat="server">
<ZoneTemplate>
<cc1:TitleEditorPart runat="server" ID="TitleEditorPart1" />
</ZoneTemplate>
</asp:EditorZone>
Temel özellikleriyle Custom EditorPart yazmak işte bu kadar basit. Bundan sonrası WebPart’ınızın ihtiyaçlarına ve sizin hayal gücünüze kalıyor.