Kullanıcı Kontrolü, ASP.NET kontrol sarmalamanın en basit biçimidir. HTML (Hypertext Markup Language - Hipermetin İşaretleme Dili) ve program kodu birleşiminden oluşan .ascx uzantılı dosyalardır. Kullanıcı Kontrolü, kendi olaylarına sahiptir. Örneğin, her Kullanıcı Kontrolü'nün Page.Load olayı vardır.
Kullanıcı Kontrolü'ne doğrudan gelen istekleri .NET Framework engeller. Kullanıcı Kontrolü tek başına sunulamaz; ancak bir Web Form içerisinde yer alarak sunulabilir.
Kullanıcı Kontrollerinde kullanılan değişkenler ile Kullanıcı Kontrolü'nü barındıran sayfanın değişkenleri birbirine karışmaz. Kullanıcı Kontrolleri birer sınıftır ve tanımlanan değişkenler bu sınıfın birer üyesidir.
Bir Kullanıcı Kontrolü tüm Web uygulaması tarafından kullanılabilir; ancak başka bir Web uygulamasındaki bir Web Form tarafından kullanılamaz. Kontrolleri birden fazla Web uygulaması arasında paylaşabilmek için tavsiye edilen yol, Web Kontrol Kütüphanelerini kullanmaktır; fakat Web Kontrol Kütüphanelerini geliştirmek için görsel araçlar olmadığından geliştirme süreci daha zorludur.
Kullanıcı Kontrolü Kullanmanın Avantajları
- Kullanıcı Kontrolü, Kullanıcı Arabirimi'nin bölümlere ayrılıp tekrar kullanılmasında büyük kolaylık sağlar. Web Form’larda olduğu gibi code-behinddosyaları ile kodlanabilir.
- Bir Web Form sayfası içerisinde aynı Kullanıcı Kontrolü birden çok kez kullanılabilir ve bu durum herhangi bir karışıklığa sebep olmaz.
- Mimari yapısı sayesinde uygulamanın tümünden farklı bir programlama dili (VB.NET,C#) ile yazılabilir.
- Kullanıcı Kontrolleri sayfa başlığı, bir formun bölümü gibi bir çok amaçla kullanılır.
- Kullanıcı Kontrolü, programcının kendi ihtiyaçları doğrultusunda özelleştirilmiş kontroller oluşturabilmeyi sağlar. Örneğin; bir çok Textbox (Metin Kutusu) içine sadece sayısal değerler girilmesi isteniyorsa, bu işlemi gerçekleştiren kod bloğunun tekrarlanması yerine bu özellikleri sağlayan bir Kullanıcı Kontrolü oluşturulur ve her bir Textbox'a uygulanır. Bu, programcılık açısından daha pratik bir kullanımdır ve program üzerinde değişiklik yapılmak istendiğinde kolaylık sağlar.
Microsoft Visual Studio ile Bir Kullanıcı Kontrolü Oluşturmak
- Solution Explorer (Çözüm Gezgini) penceresi içerisinde, üzerinde çalışılan Web projesine sağ tıklanır. Açılan menüden Add New Item (Yeni Öğe Ekle)seçilir ve gelen pencerede Web User Control seçeneğini seçilir.
- Kullanıcı Kontrolü’ne istenilen bir isim verilip Add (Ekle) düğmesine tıklanır; .ascx uzantılı bir dosya oluşturulur.
- Açılan Kullanıcı Kontrolü sayfasına Kullanıcı Arabirimi öğeleri eklenir, bu işlem Web Formlarda yapıldığı gibidir. Toolbox (Araç Kutusu) penceresinden istenilen öğe, Kullanıcı Kontrolü sayfası üzerine sürüklenip bırakılabilir veya HTML bölümünden yazılarak eklenebilir.
- Web Form sayfalarında olduğu gibi code-behind dosyasında istenilen olay prosedürleri oluşturulabilir.
Basit bir Kullanıcı Kontrolü aşağıdaki kodlarla oluşturulabilir:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl.ascx.cs" Inherits="WebUserControl" %>
<asp:Panel ID="pnDeneme" runat="server" >
<asp:Label>
Kullanıcı kontrolü çalıştırıldı.
</asp:Label>
</asp:Panel>
Kullanıcı Kontrolleri aynı uygulama içerisinde bulunan Web Formlara eklenebilir.
Kullanıcı Kontrollerini kullanacak olan Web Formlarda önceden bazı bildirimler yapılmalıdır. Kullanıcı Kontrolü, @Register etiketi ile Web Form'a önceden tanıtılmalıdır.
@Register etiketi için örnek bir söz dizimi aşağıdaki gibidir:
<%@ Register Src="~/WebUserControl.ascx" TagName="Deneme" TagPrefix="UserControl"%>
TagPrefix özelliği, Kullanıcı Kontrolleri için bir isim uzayı (namespace) belirler. Böylece aynı isme sahip Kullanıcı Kontrolleri farklı isim uzayları içersinde tutulabilir.
TagName özelliği, Kulllanıcı Kontrolü için isim belirler.
Src özelliği, Kullanıcı Kontrolü dosyasının (.ascx) yolunu belirler.
Sayfaya yukarıdaki şekilde tanıtılan Kullanıcı Kontrolü aşağıdaki şekilde sayfaya eklenebilir:
<asp:Content ID="Content2" runat="server" ContentPlaceHolderID="MainContent">
<UserControl:Deneme ID="oDeneme" runat="server" />
</asp:Content>