Daha önceki makalem de Wap kontrollerini anlatırken çok kısa da olsa bu kontrolün ne işe yaradığını anlatmıştım. Hatırlatmak gerekirse; Cep telefonlarının desteklediği markup diline göre kodumuzun render edilmesini sağlar. Örneğin html destekleyen bir telefonda sonuç html üretilir, WML destekleyen bir telefonda sonuç WML olarak üretilir. XHTML destekleyen telefonda da XHTML olarak üretilir.
Bu kontrolü niçin kullanırım?
Bir wap uygulaması geliştirdiğimizde her ziyaretçinin uygulamayı sorunsuz şekilde kullanabilmesi için bu kontrolü kullanırız. Kullanıcı arka planda telefonun ne desteklediğini bilemeyeceğinden yada bu uygulama bu telefon da çalışmaz diyemeyeceğimizden bu kontrol ile uygulamamızın tüm telefonlar da çalışmasını sağlarız.
Choice
Render edilecek Markup dili belirliyor. WML render edilecekse içerisine WML’e göre kod yazıyoruz. Html ise Html'e göre yazıyoruz.
ContentTemplate
Her yerde olduğu gibi burada da ContentTemplate çıkıyor karşımıza. Content Template içerisine Choice’de seçilen dile göre content template içerisindeki kod render edilecek.
DeviceSpecific Kullanımı
Uygulamanın WML ve HTML destekleyen telefonlar da çalışabilmesi için aşağıdaki gibidir;
<mobile:Panel ID="Panel1" runat="server">
<mobile:DeviceSpecific ID="DeviceSpecificControl" Runat="server">
<Choice Filter="isWML11">
<ContentTemplate>
<!— WML Render Edilecek -->
</ContentTemplate>
</Choice>
<Choice Filter="isHTML32">
<!-- HTML Render edilecek -->
</mobile:DeviceSpecific>
</mobile:Panel>
Bu kodun çalışması için WebConfig dosyasına Tanımlı DeviceFilter’ları eklememiz gerekir. Genel olarak 2 DeviceFilter kullanılsa da farklı devicefitlerlar’da bulunmaktadır. Aşağıda bazı device filter’lar gösterilmiştir.
<deviceFilters>
<filter name="isWML11" compare="PreferredRenderingType" argument="wml11" />
<filter name="isHTML32" compare="PreferredRenderingType" argument="html32" />
<filter name="isCHTML10" compare="PreferredRenderingType" argument="chtml10" />
<filter name="isMyPalm" compare="Browser" argument="MyPalm" />
<filter name="isPocketIE" compare="Browser" argument="Pocket IE" />
<filter name="isJPhone" compare="Type" argument="J-Phone" />
<filter name="isEricssonR380" compare="Type" argument="Ericsson R380" />
<filter name="isNokia7110" compare="Type" argument="Nokia 7110" />
<filter name="supportsColor" compare="IsColor" argument="true" />
<filter name="supportsCookies" compare="Cookies" argument="true" />
<filter name="supportsJavaScript" compare="Javascript" argument="true" />
<filter name="supportsVoiceCalls" compare="CanInitiateVoiceCall" argument="true" />
</deviceFilters>
Farklı bir Filter(örneğin CHTML ve PocketIE) ile render yapılmasını istiyorsak; aşağıdaki gibi kullanırız.
<Choice Filter=" isCHTML10">