Web Geliştirme için ASP.NET 4 ve Visual Studio 2010'a genel bakış

Bu belge, the.NET Framework 4 ve Visual Studio 2010'da bulunan ASP.NET için birçok yeni özelliğe genel bakış sağlar.

Bu Teknik İncelemeyi İndir

İçerik

Temel Hizmetler
Web.config Dosyasının Yeniden Yapılandırılması
Genişletilebilir Çıkış Önbelleğe Alma
Web Uygulamalarını Otomatik Başlat
Sayfayı Kalıcı Olarak Yeniden Yönlendirme
Oturum Durumunu Küçültme
İzin Verilebilen URL'ler Aralığını Genişletme
Genişletilebilir İstek Doğrulama
Nesne Önbelleğe Alma ve Nesne Önbelleğe Alma Genişletilebilirliği
Genişletilebilir HTML, URL ve HTTP Üst Bilgi Kodlaması
Tek Bir Çalışan İşlemindeki Tek Tek Uygulamalar için Performans İzleme
Çoklu Hedefleme

Ajax
jQuery Web Forms ve MVC'ye Dahil
Content Delivery Network Desteği
ScriptManager Açık Betikleri

Web Forms
Page.MetaKeywords ve Page.MetaDescription Özellikleriyle Meta Etiketleri Ayarlama
Tek Tek Denetimler için Görünüm Durumunu Etkinleştirme
Tarayıcı Özelliklerindeki Değişiklikler
ASP.NET 4'te yönlendirme
İstemci Kimliklerini Ayarlama
Veri Kontrollerinde Satır Seçimini Kalıcı Hale Getirme
ASP.NET Grafik Kontrolü
QueryExtender Denetimiyle Verileri Filtreleme
Html Kodlanmış Kod İfadeleri
Proje Şablonu Değişiklikleri
CSS Geliştirmeleri
Gizli Alanların Çevresinde Div Öğelerini Gizleme
Şablonlu Denetimler için Dış Tablo İşleme
ListView Denetimi Geliştirmeleri
CheckBoxList ve RadioButtonList Denetim Geliştirmeleri
Menü Denetimi Geliştirmeleri
Sihirbaz ve CreateUserWizard Denetimleri 56

ASP.NET MVC
Alan Desteği
Data-Annotation Öznitelik Doğrulama Desteği
Şablonlu Yardımcılar

Dinamik Veriler
Mevcut Projeler için Dinamik Verileri Etkinleştirme
Bildirim temelli DynamicDataManager Denetimi Söz Dizimi
Varlık Şablonları
URL'ler ve E-posta Adresleri için Yeni Alan Şablonları
DynamicHyperLink Denetimiyle Bağlantı Oluşturma
Veri Modelinde Devralma Desteği
Çoka Çok İlişkiler Desteği (Yalnızca Entity Framework)
Görüntüleme ve Destek Numaralandırmalarını Denetlemek için Yeni Öznitelikler
Filtreler için Gelişmiş Destek

Visual Studio 2010 Web Geliştirmeleri
Geliştirilmiş CSS Uyumluluğu
HTML ve JavaScript Kod Parçacıkları
JavaScript IntelliSense Geliştirmeleri

Visual Studio 2010 ile Web Uygulaması Dağıtımı
Web Paketleme
Web.config Dönüşümü
Veritabanı Dağıtımı
Web Uygulamaları için One-Click Yayımlama
Kaynaklar

Reddi

Temel Hizmetler

ASP.NET 4, çıktı önbelleğe alma ve oturum durumu depolama gibi temel ASP.NET hizmetlerini geliştiren bir dizi özellik sunar.

Web.config Dosyasının Yeniden Düzenlenmesi

Web.config Ajax, yönlendirme ve IIS 7 ile tümleştirme gibi yeni özellikler eklendikçe, bir Web uygulamasının yapılandırmasını içeren dosya .NET Framework'ün son birkaç sürümünde önemli ölçüde büyüdü. Bu, Visual Studio gibi bir araç olmadan yeni Web uygulamalarını yapılandırmayı veya başlatmayı zorlaştırdı. .NET Framework 4'te, ana yapılandırma öğeleri dosyaya machine.config taşındı ve uygulamalar artık bu ayarları devralır. Bu, ASP.NET 4 uygulamadaki dosyanın boş olmasını veya Visual Studio için uygulamanın hangi çerçeve sürümünü hedefleeceğini belirten yalnızca aşağıdaki satırları içermesini sağlar Web.config :

<?xml version="1.0"?>
  <configuration>
   <system.web>
    <compilation targetFramework="4.0" /> 
   </system.web>
  </configuration>

Genişletilebilir Çıkış Önbellekleme

ASP.NET 1.0 yayımlandığından bu yana, çıkış önbelleğe alma geliştiricilerin sayfaların, denetimlerin ve HTTP yanıtlarının oluşturulan çıkışını bellekte depolamasına olanak sağlamıştır. Sonraki Web isteklerinde ASP.NET, çıktıyı sıfırdan yeniden oluşturma yerine bellekten oluşturulan çıkışı alarak içeriği daha hızlı bir şekilde sunabilirsiniz. Bununla birlikte, bu yaklaşımın bir sınırlaması vardır; oluşturulan içeriğin her zaman bellekte depolanması gerekir ve yoğun trafik yaşayan sunucularda, çıktı önbelleğe alma tarafından kullanılan bellek, Web uygulamasının diğer bölümlerinden gelen bellek talepleriyle rekabet edebilir.

ASP.NET 4, çıktı önbelleğine bir veya daha fazla özel çıkış önbelleği sağlayıcısı yapılandırmanızı sağlayan bir genişletilebilirlik noktası ekler. Çıktı önbelleği sağlayıcıları, HTML içeriğini kalıcı hale getirmek için herhangi bir depolama mekanizmasını kullanabilir. Bu, yerel veya uzak diskler, bulut depolama ve dağıtılmış önbellek altyapılarını içerebilen çeşitli kalıcılık mekanizmaları için özel çıkış önbelleği sağlayıcıları oluşturmayı mümkün kılar.

Yeni System.Web.Caching.OutputCacheProvider türünden türetilen bir sınıf olarak özel bir çıktı önbelleği sağlayıcısı oluşturursunuz. Ardından, aşağıdaki örnekte gösterildiği gibi Web.config öğesinin yeni sağlayıcılar alt kısmını kullanarak dosyadaki sağlayıcıyı yapılandırabilirsiniz:

<caching>
  <outputCache defaultProvider="AspNetInternalProvider">
    <providers>
      <add name="DiskCache"
          type="Test.OutputCacheEx.DiskOutputCacheProvider, DiskCacheProvider"/>
    </providers>
  </outputCache>

</caching>

varsayılan olarak ASP.NET 4'te tüm HTTP yanıtları, işlenen sayfalar ve denetimler, önceki örnekte gösterildiği gibi , defaultProvider özniteliğinin AspNetInternalProvider olarak ayarlandığı bellek içi çıktı önbelleğini kullanır. DefaultProvider için farklı bir sağlayıcı adı belirterek bir Web uygulaması için kullanılan varsayılan çıktı önbelleği sağlayıcısını değiştirebilirsiniz.

Buna ek olarak, denetim ve istek başına farklı çıkış önbelleği sağlayıcıları seçebilirsiniz. Farklı Web kullanıcı denetimleri için farklı bir çıkış önbelleği sağlayıcısı seçmenin en kolay yolu, aşağıdaki örnekte gösterildiği gibi bir denetim yönergesinde yeni providerName özniteliğini kullanarak bunu bildirimli olarak yapmaktır:

<%@ OutputCache Duration="60" VaryByParam="None" providerName="DiskCache" %>

HTTP isteği için farklı bir çıkış önbelleği sağlayıcısı belirtmek için biraz daha fazla çalışma gerekir. Sağlayıcıyı bildirimli olarak belirtmek yerine, belirli bir istek için kullanılacak sağlayıcıyı program aracılığıyla belirtmek üzere dosyadaki yeni Global.asax yöntemini geçersiz kılarsınız. Aşağıdaki örnekte bunun nasıl yapıldığını gösterilmektedir.

public override string GetOutputCacheProviderName(HttpContext context)
{
    if (context.Request.Path.EndsWith("Advanced.aspx"))
       return "DiskCache";
    else
        return base.GetOutputCacheProviderName(context);
}

ASP.NET 4'e çıktı önbelleği sağlayıcısı genişletilebilirliği eklendi. Artık Web siteleriniz için daha agresif ve daha akıllı çıkış önbelleğe alma stratejileri izleyebilirsiniz. Örneğin, diskte daha düşük trafik alan sayfaları önbelleğe alırken, artık bir sitenin "İlk 10" sayfasını önbelleğe almak mümkündür. Alternatif olarak, render edilmiş bir sayfa için her varyasyona göre kombinasyonu önbelleğe alabilir, ancak ön uç Web sunucularının bellek tüketiminin azaltılması için dağıtılmış bir önbellek kullanabilirsiniz.

Web Uygulamalarını Otomatik Başlat

Bazı Web uygulamalarının ilk isteği sunmadan önce büyük miktarda veri yüklemesi veya pahalı başlatma işlemleri gerçekleştirmesi gerekir. ASP.NET'in önceki sürümlerinde, bu durumlarda bir ASP.NET uygulamasını "uyandırmak" için özel yaklaşımlar oluşturmanız ve ardından dosyadaki Global.asax yöntemi sırasında başlatma kodunu çalıştırmanız gerekiyordu.

ASP.NET 4, Windows Server 2008 R2 üzerinde IIS 7.5 üzerinde çalıştığında bu senaryoya doğrudan çözüm getiren otomatik başlatma adlı yeni bir ölçeklenebilirlik özelliği kullanılabilir. Otomatik başlatma özelliği, uygulama havuzu başlatmak, bir ASP.NET uygulaması başlatmak ve ardından HTTP isteklerini kabul etmek için denetimli bir yaklaşım sağlar.

Uyarı

IIS 7.5 için IIS Uygulama Warm-Up Modülü

IIS ekibi, IIS 7.5 için Application Warm-Up Modülünün ilk beta test sürümünü yayımladı. Bu, uygulamalarınızın ısınmasını daha önce açıklanandan daha kolay hale getirir. Özel kod yazmak yerine, Web uygulaması ağdan gelen istekleri kabul etmeden önce yürütülecek kaynakların URL'lerini belirtirsiniz. Bu ısınma, IIS hizmetinin başlatılması sırasında (IIS uygulama havuzunu AlwaysRunning olarak yapılandırdıysanız) ve bir IIS çalışan işlemi geri dönüşüme geçtiğinde gerçekleşir. IIS geri dönüşümü sırasında, eski çalışan işlemi, yeni oluşturulan çalışan işlem tamamen ısınıncaya kadar istekleri yerine getirmeye devam eder, bu sayede uygulamalar, hazırlıksız önbelleklerden dolayı kesintiye uğramaz veya başka sorunlar yaşamaz. Bu modülün sürüm 2.0'dan başlayarak ASP.NET herhangi bir sürümüyle çalıştığını unutmayın.

Daha fazla bilgi için bkz. IIS.net Web sitesindeki Uygulama Isınma . Isınma özelliğinin nasıl kullanılacağını gösteren bir kılavuz için bkz. IIS.net Web sitesindeki IIS 7.5 Uygulama Warm-Up Modülü ile Çalışmaya Başlama .

Iis yöneticisi, otomatik başlatma özelliğini kullanmak için IIS 7.5'teki bir uygulama havuzunu dosyada applicationHost.config aşağıdaki yapılandırma kullanılarak otomatik olarak başlatılacak şekilde ayarlar:

<applicationpools>
  <add name="MyApplicationPool" startMode="AlwaysRunning" />
</applicationpools>

Tek bir uygulama havuzu birden çok uygulama içerebileceğinden, dosyada aşağıdaki yapılandırmayı kullanarak tek tek uygulamaların otomatik olarak başlatılmasını applicationHost.config belirtirsiniz:

<sites>
  <site name="MySite" id="1">
    <application path="/" 
      serviceAutoStartEnabled="true"
      serviceAutoStartProvider="PrewarmMyCache" >
      <!-- Additional content -->
    </application>
  </site>

</sites>

<!-- Additional content -->

<serviceautostartproviders>
  <add name="PrewarmMyCache"
    type="MyNamespace.CustomInitialization, MyLibrary" />
</serviceautostartproviders>

IIS 7.5 sunucusu soğuk başlatıldığında veya tek bir uygulama havuzu geri dönüştürüldiğinde, IIS 7.5 hangi Web uygulamalarının otomatik olarak başlatılması gerektiğini belirlemek için dosyadaki applicationHost.config bilgileri kullanır. Otomatik başlatma için işaretlenen her uygulama için IIS7.5, uygulamayı geçici olarak HTTP isteklerini kabul etmeyen bir durumda başlatmak üzere ASP.NET 4'e bir istek gönderir. Bu durumda olduğunda, ASP.NET serviceAutoStartProvider özniteliği tarafından tanımlanan türün örneğini oluşturur (önceki örnekte gösterildiği gibi) ve genel giriş noktasına çağrılar.

Aşağıdaki örnekte gösterildiği gibi IProcessHostPreloadClient arabirimini uygulayarak gerekli giriş noktasıyla yönetilen bir otomatik başlangıç türü oluşturursunuz:

public class CustomInitialization : System.Web.Hosting.IProcessHostPreloadClient
{
    public void Preload(string[] parameters)
    {
        // Perform initialization. 
    }
}

Başlatma kodunuz Preload yönteminde çalıştırıldıktan ve yöntem döndürdüğünde ASP.NET uygulama istekleri işlemeye hazır hale gelir.

IIS .5 ve ASP.NET 4'e otomatik başlatmanın eklenmesiyle, artık ilk HTTP isteğini işlemeden önce pahalı uygulama başlatma gerçekleştirmek için iyi tanımlanmış bir yaklaşıma sahipsiniz. Örneğin, yeni otomatik başlatma özelliğini kullanarak bir uygulamayı başlatabilir ve ardından bir yük dengeleyiciye uygulamanın başlatıldığını ve HTTP trafiğini kabul etmeye hazır olduğunu belirtebilirsiniz.

Sayfayı Kalıcı Olarak Yeniden Yönlendirme

Web uygulamalarında sayfaları ve diğer içerikleri zaman içinde taşımak yaygın bir uygulamadır ve bu da arama motorlarında eski bağlantıların birikmesine neden olabilir. ASP.NET'da geliştiriciler geleneksel olarak, isteği yeni URL'ye iletmek için Response.Redirect yöntemini kullanarak eski URL'lere yönelik istekleri işledi. Ancak , Redirect yöntemi bir HTTP 302 Bulundu (geçici yeniden yönlendirme) yanıtı gönderir ve bu da kullanıcılar eski URL'lere erişmeye çalıştığında fazladan bir HTTP gidiş dönüşe neden olur.

ASP.NET 4, aşağıdaki örnekte olduğu gibi HTTP 301 Kalıcı Taşındı yanıtlarını vermenizi kolaylaştıran yeni bir RedirectPermanent yardımcı yöntemi ekler:

RedirectPermanent("/newpath/foroldcontent.aspx");

Kalıcı yeniden yönlendirmeleri tanıyan arama motorları ve diğer kullanıcı aracıları, içerikle ilişkili yeni URL'yi depolar ve bu da tarayıcı tarafından geçici yeniden yönlendirmeler için yapılan gereksiz gidiş dönüşleri ortadan kaldırır.

Oturum Durumu Azaltma

ASP.NET, bir Web grubu genelinde oturum durumunu depolamak için iki varsayılan seçenek sağlar: işlem dışı oturum durumu sunucusunu çağıran bir oturum durumu sağlayıcısı ve bir Microsoft SQL Server veritabanında veri depolayan bir oturum durumu sağlayıcısı. Her iki seçenek de durum bilgilerini Bir Web uygulamasının çalışan işleminin dışında depolamayı içerdiği için, oturum durumunun uzak depolamaya gönderilmeden önce serileştirilmesi gerekir. Bir geliştiricinin oturum durumunda ne kadar bilgi kaydettiğine bağlı olarak, serileştirilmiş verilerin boyutu oldukça büyüyebilir.

ASP.NET 4, her iki işlem dışı oturum durumu sağlayıcısı için de yeni bir sıkıştırma seçeneği sağlar. Aşağıdaki örnekte gösterilen compressionEnabled yapılandırma seçeneği true olarak ayarlandığında, ASP.NET .NET Framework System.IO.Compression.GZipStream sınıfını kullanarak serileştirilmiş oturum durumunu sıkıştırır (ve açar).

<sessionState
  mode="SqlServer"
  sqlConnectionString="data source=dbserver;Initial Catalog=aspnetstate"
  allowCustomSqlDatabase="true"
  compressionEnabled="true"
/>

Dosyaya Web.config yeni özniteliğin basit bir şekilde eklenmesiyle, Web sunucularında yedek CPU döngülerine sahip uygulamalar serileştirilmiş oturum durumu verilerinin boyutunda önemli ölçüde azalmalar gerçekleştirebilir.

İzin Verilebilen URL'ler Aralığını Genişletme

ASP.NET 4, uygulama URL'lerinin boyutunu genişletmek için yeni seçenekler sağlar. NTFS dosya yolu sınırına bağlı olarak, ASP.NET önceki URL yolu uzunlukları 260 karakterle sınırlıdır. ASP.NET 4'te, iki yeni httpRuntime yapılandırma özniteliği kullanarak bu sınırı uygulamalarınıza uygun şekilde artırma (veya azaltma) seçeneğiniz vardır. Aşağıdaki örnekte bu yeni öznitelikler gösterilmektedir.

<httpRuntime maxUrlLength="260" maxQueryStringLength="2048" />

Daha uzun veya daha kısa yollara (URL'nin protokol, sunucu adı ve sorgu dizesi içermeyen bölümü) izin vermek için maxUrlLength özniteliğini değiştirin. Daha uzun veya daha kısa sorgu dizelerine izin vermek için maxQueryStringLength özniteliğinin değerini değiştirin.

ASP.NET 4, URL karakter denetimi tarafından kullanılan karakterleri yapılandırmanızı da sağlar. ASP.NET URL'nin yol bölümünde geçersiz bir karakter bulduğunda, isteği reddeder ve bir HTTP 400 hatası döndürür. ASP.NET önceki sürümlerinde URL karakter denetimleri sabit bir karakter kümesiyle sınırlıydı. ASP.NET 4'te, aşağıdaki örnekte gösterildiği gibi httpRuntime yapılandırma öğesinin yeni requestPathInvalidCharacters özniteliğini kullanarak geçerli karakter kümesini özelleştirebilirsiniz:

<httpRuntime requestPathInvalidCharacters="&lt;,&gt;,*,%,&amp;,:,\,?"  />

Varsayılan olarak , requestPathInvalidCharacters özniteliği sekiz karakteri geçersiz olarak tanımlar. (varsayılan olarak requestPathInvalidCharacters'a atanan dizede, < küçük, > büyük ve & karakterleri kodlanmıştır, çünkü Web.config dosyası bir XML dosyasıdır.) Geçersiz karakter kümesini gerektiği gibi özelleştirebilirsiniz.

Uyarı

Not ASP.NET 4 her zaman 0x1F için 0x00 ASCII aralığında karakterler içeren URL yollarını reddeder, çünkü bunlar IETF'ninhttp://www.ietf.org/rfc/rfc2396.txt RFC 2396'sında tanımlandığı gibi geçersiz URL karakterleridir. IIS 6 veya üzerini çalıştıran Windows Server sürümlerinde, http.sys protokolü cihaz sürücüsü bu karakterlere sahip URL'leri otomatik olarak reddeder.

Genişletilebilir İstek Doğrulama

ASP.NET istek doğrulama, siteler arası betik (XSS) saldırılarında yaygın olarak kullanılan dizeler için gelen HTTP isteği verilerini arar. Olası XSS dizeleri bulunursa, istek doğrulama şüpheli dizeyi işaretler ve bir hata döndürür. Yerleşik istek doğrulaması yalnızca XSS saldırılarında kullanılan en yaygın dizeleri bulduğunda bir hata döndürür. Önceki XSS doğrulamasını daha agresif hale getirme girişimleri çok fazla hatalı pozitif sonuç verdi. Ancak, müşteriler daha agresif bir istek doğrulama isteği isteyebilir veya bunun tersine belirli sayfalar veya belirli istek türleri için XSS denetimlerini kasıtlı olarak gevşetmek isteyebilir.

ASP.NET 4'te, özel istek doğrulama mantığını kullanabilmeniz için istek doğrulama özelliği genişletilebilir hale getirilmiştir. İstek doğrulamasını genişletmek için, yeni System.Web.Util.RequestValidator türünden türetilen bir sınıf oluşturur ve uygulamayı (dosyanın httpRuntime bölümünde Web.config ) özel türü kullanacak şekilde yapılandırırsınız. Aşağıdaki örnekte özel bir istek doğrulama sınıfının nasıl yapılandırılır gösterilmektedir:

<httpRuntime requestValidationType="Samples.MyValidator, Samples" />

Yeni requestValidationType özniteliği, özel istek doğrulaması sağlayan sınıfı belirten standart bir .NET Framework türü tanımlayıcı dizesi gerektirir. her istek için ASP.NET gelen HTTP isteği verilerinin her parçasını işlemek için özel türü çağırır. Gelen URL, tüm HTTP üst bilgileri (hem tanımlama bilgileri hem de özel üst bilgiler) ve varlık gövdesi, aşağıdaki örnekte gösterildiği gibi bir özel istek doğrulama sınıfı tarafından denetlenebilir.

public class CustomRequestValidation : RequestValidator
{
    protected override bool IsValidRequestString(
      HttpContext context, string value, 
      RequestValidationSource requestValidationSource, 
      string collectionKey, 
      out int validationFailureIndex) 
    {...}
 }

Gelen HTTP verilerinin bir parçasını incelemek istemediğiniz durumlarda, request-validation sınıfı sadece 'base.IsValidRequestString' çağrılarak ASP.NET'in varsayılan istek doğrulamasının çalışmasını sağlamak için geri çekilebilir.

Nesne Önbelleğe Alma ve Nesne Önbelleğe Alma Genişletilebilirliği

İlk sürümünden bu yana, ASP.NET güçlü bir bellek içi nesne önbelleği (System.Web.Caching.Cache) eklemiştir. Önbellek uygulaması o kadar popülerdi ki Web dışı uygulamalarda kullanıldı. Ancak, bir Windows Forms veya WPF uygulamasının yalnızca ASP.NET nesne önbelleğini kullanabilmek için System.Web.dll başvuru eklemesi garip bir durumdur.

Önbelleğe almayı tüm uygulamalarda kullanılabilir hale getirmek için .NET Framework 4 yeni bir derleme, yeni bir ad alanı, bazı temel türler ve somut bir önbelleğe alma uygulaması sunar. Yeni System.Runtime.Caching.dll derleme, System.Runtime.Caching ad alanında bulunan yeni bir önbelleğe alma API'sini içerir. Ad alanı iki temel sınıf kümesi içerir:

  • Herhangi bir tür özel önbellek uygulaması oluşturmak için temel sağlayan soyut türler.
  • Somut bir bellek içi nesne önbelleği uygulaması ( System.Runtime.Caching.MemoryCache sınıfı).

Yeni MemoryCache sınıfı, ASP.NET önbelleğinde yakından modellenmiştir ve iç önbellek altyapısı mantığının büyük bir kısmını ASP.NET ile paylaşır. System.Runtime.Caching'deki genel önbelleğe alma API'leri özel önbellek geliştirmeyi destekleyecek şekilde güncelleştirilmiş olsa da, ASP.NET Cache nesnesini kullandıysanız, yeni API'lerde tanıdık kavramlar bulacaksınız.

Yeni MemoryCache sınıfı ve destekleyici temel API'ler hakkında ayrıntılı bir tartışma için belgenin tamamı gerekir. Ancak, aşağıdaki örnek size yeni önbellek API'sinin nasıl çalıştığı hakkında bir fikir verir. Örnek, herhangi System.Web.dllbir bağımlılığı olmadan bir Windows Forms uygulaması için yazılmıştır.

private void btnGet_Click(object sender, EventArgs e) 
{ 
    //Obtain a reference to the default MemoryCache instance. 
    //Note that you can create multiple MemoryCache(s) inside 
    //of a single application. 
    ObjectCache cache = MemoryCache.Default; 

    //In this example the cache is storing the contents of a file string 
    fileContents = cache["filecontents"] as string;

    //If the file contents are not currently in the cache, then 
    //the contents are read from disk and placed in the cache. 
    if (fileContents == null) 
    {
        //A CacheItemPolicy object holds all the pieces of cache 
        //dependency and cache expiration metadata related to a single 
        //cache entry. 
        CacheItemPolicy policy = new CacheItemPolicy(); 

        //Build up the information necessary to create a file dependency. 
        //In this case we just need the file path of the file on disk. 
        List filePaths = new List(); 
        filePaths.Add("c:\\data.txt"); 

        //In the new cache API, dependencies are called "change monitors". 
        //For this example we want the cache entry to be automatically expired 
        //if the contents on disk change. A HostFileChangeMonitor provides 
        //this functionality. 
        policy.ChangeMonitors.Add(new HostFileChangeMonitor(filePaths)); 

        //Fetch the file's contents 
        fileContents = File.ReadAllText("c:\\data.txt"); 

        //And then store the file's contents in the cache 
        cache.Set("filecontents", fileContents, policy); 

    } 
    MessageBox.Show(fileContents); 
}

Genişletilebilir HTML, URL ve HTTP Üst Bilgi Kodlaması

ASP.NET 4'te, aşağıdaki yaygın metin kodlama görevleri için özel kodlama yordamları oluşturabilirsiniz:

  • HTML kodlama.
  • URL kodlama.
  • HTML özniteliği kodlaması.
  • Giden HTTP üst bilgilerini kodlama.

Aşağıdaki örnekte gösterildiği gibi, yeni System.Web.Util.HttpEncoder türünden türeterek ve ardından ASP.NET dosyanın httpRuntime bölümünde Web.config özel türü kullanacak şekilde yapılandırarak özel kodlayıcı oluşturabilirsiniz:

<httpRuntime encoderType="Samples.MyCustomEncoder, Samples" />

Özel kodlayıcı yapılandırıldıktan sonra, System.Web.HttpUtility veya System.Web.HttpServerUtility sınıflarının genel kodlama yöntemleri çağrıldığında ASP.NET otomatik olarak özel kodlama uygulamasını çağırır. Bu, Web geliştirme ekibinin bir bölümünün agresif karakter kodlaması uygulayan özel bir kodlayıcı oluşturmasına olanak tanırken, Web geliştirme ekibinin geri kalanı genel ASP.NET kodlama API'lerini kullanmaya devam eder. httpRuntime öğesinde bir özel kodlayıcıyı merkezi olarak yapılandırarak, genel ASP.NET kodlama API'lerinden gelen tüm metin kodlama çağrılarının özel kodlayıcı aracılığıyla yönlendirilmesi garanti edilir.

Tek Bir Çalışan İşlemindeki Tek Tek Uygulamalar için Performans İzleme

Tek bir sunucuda barındırılabilir Web sitesi sayısını artırmak için, birçok barındırmacı tek bir çalışan işleminde birden çok ASP.NET uygulaması çalıştırır. Ancak, birden çok uygulama tek bir paylaşılan çalışan işlemi kullanıyorsa, sunucu yöneticilerinin sorun yaşayan tek bir uygulamayı belirlemesi zordur.

ASP.NET 4, CLR tarafından sunulan yeni kaynak izleme işlevselliğinden yararlanıyor. Bu işlevi etkinleştirmek için, yapılandırma dosyasına aşağıdaki XML yapılandırma parçacığını aspnet.config ekleyebilirsiniz.

<?xml version="1.0" encoding="UTF-8" ?> 
<configuration> 
  <runtime> 
    <appDomainResourceMonitoring enabled="true"/> 
  </runtime> 

</configuration>

Uyarı

Not Dosya aspnet.config , .NET Framework'ün yüklü olduğu dizindedir. Web.config dosyası değil.

appDomainResourceMonitoring özelliği etkinleştirildiğinde, "ASP.NET Uygulamaları" performans kategorisinde iki yeni performans sayacı kullanılabilir: % Yönetilen İşlemci Süresi ve Kullanılan Yönetilen Bellek. Bu performans sayaçlarının her ikisi de, tek tek ASP.NET uygulamaların tahmini CPU süresini ve yönetilen bellek kullanımını izlemek için yeni CLR uygulama etki alanı kaynak yönetimi özelliğini kullanır. Sonuç olarak, ASP.NET 4 ile yöneticiler artık tek bir çalışan işleminde çalışan tek tek uygulamaların kaynak tüketimine daha ayrıntılı bir görünüme sahip olur.

Çoklu Hedefleme

.NET Framework'ün belirli bir sürümünü hedefleyen bir uygulama oluşturabilirsiniz. ASP.NET 4'te, dosyanın derleme öğesindeki Web.config yeni bir öznitelik .NET Framework 4 ve üzerini hedeflemenizi sağlar. .NET Framework 4'i açıkça hedeflerseniz ve dosyaya Web.configsystem.codedom girdileri gibi isteğe bağlı öğeler eklerseniz, bu öğelerin .NET Framework 4 için doğru olması gerekir. (".NET Framework 4'ü açıkça hedeflemiyorsanız, hedef çerçeve, Web.config dosyasında giriş olmamasına dayanarak tahmin edilir.")

Aşağıdaki örnekte, dosyanın derleme öğesinde targetFramework özniteliğinin Web.config kullanımı gösterilmektedir.

<compilation targetFramework="4.0"/>

.NET Framework'ün belirli bir sürümünü hedefleme hakkında aşağıdakilere dikkat edin:

  • .NET Framework 4 uygulama havuzunda, dosya Web.configtargetFramework özniteliğini içermiyorsa veya dosya Web.config eksikse, ASP.NET derleme sistemi hedef olarak .NET Framework 4'ü varsayar. (.NET Framework 4 altında çalışması için uygulamanızda kodlama değişiklikleri yapmanız gerekebilir.)
  • targetFramework özniteliğini eklerseniz ve dosyada Web.config öğesi tanımlanmışsa, bu dosya .NET Framework 4 için doğru girişleri içermelidir.
  • Uygulamanızı önceden derlemek için aspnet_compiler komutunu kullanıyorsanız (derleme ortamında olduğu gibi), hedef çerçeve için aspnet_compiler komutunun doğru sürümünü kullanmanız gerekir. .NET Framework 3.5 ve önceki sürümleri için derlemek üzere .NET Framework 2.0 (%WINDIR%\Microsoft.NET\Framework\v2.0.50727) ile birlikte gelen derleyiciyi kullanın. Bu çerçeve kullanılarak veya sonraki sürümleri kullanarak oluşturulan uygulamaları derlemek için .NET Framework 4 ile birlikte gelen derleyiciyi kullanın.
  • Çalışma zamanında, derleyici bilgisayarda (ve dolayısıyla GAC'de) yüklü olan en son çerçeve derlemelerini kullanır. Çerçevede daha sonra bir güncelleştirme yapılırsa (örneğin, varsayımsal bir sürüm 4.1 yüklenir), targetFramework özniteliği daha düşük bir sürümü (örneğin 4.0) hedeflese bile çerçevenin daha yeni sürümündeki özellikleri kullanabilirsiniz. (Ancak, Visual Studio 2010'da tasarım zamanında veya aspnet_compiler komutunu kullandığınızda, çerçevenin daha yeni özelliklerini kullanmak derleyici hatalarının nedeni olacaktır).

Ajax

Web Forms ve MVC'ye dahil edilen jQuery

Hem Web Forms hem de MVC için Visual Studio şablonları açık kaynak jQuery kitaplığını içerir. Yeni bir web sitesi veya proje oluşturduğunuzda, aşağıdaki 3 dosyayı içeren bir Betikler klasörü oluşturulur:

  • jQuery-1.4.1.js – jQuery kütüphanesinin insan tarafından okunabilen, sıkıştırılmamış sürümü.
  • jQuery-14.1.min.js : jQuery kitaplığının küçültüldü sürümü.
  • jQuery-1.4.1-vsdoc.js – jQuery kitaplığı için Intellisense belge dosyası.

Uygulama geliştirirken jQuery'nin unminified sürümünü ekleyin. Üretim uygulamaları için jQuery'nin küçültüldü sürümünü ekleyin.

Örneğin, aşağıdaki Web Forms sayfasında, odakları olduğunda ASP.NET TextBox denetimlerinin arka plan rengini sarı olarak değiştirmek için jQuery'yi nasıl kullanabileceğiniz gösterilmektedir.

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ShowjQuery.aspx.cs" Inherits="ShowjQuery" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">
    <title>Show jQuery</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

        <asp:TextBox ID="txtFirstName" runat="server" />
        <br />
        <asp:TextBox ID="txtLastName" runat="server" />
    </div>
    </form>
    <script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script>

    <script type="text/javascript">
    
        $("input").focus( function() { $(this).css("background-color", "yellow"); });
    
    </script>
</body>
</html>

Content Delivery Network Desteği

Microsoft Ajax Content Delivery Network (CDN), Web uygulamalarınıza kolayca ASP.NET Ajax ve jQuery betikleri eklemenize olanak tanır. Örneğin, sayfanıza aşağıdaki gibi Ajax.microsoft.com işaret eden bir <script> etiket ekleyerek jQuery kitaplığını kullanmaya başlayabilirsiniz:

<script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-1.4.2.js" type="text/javascript"></script>

Microsoft Ajax CDN'nizden yararlanarak Ajax uygulamalarınızın performansını önemli ölçüde geliştirebilirsiniz. Microsoft Ajax CDN'nin içeriği dünyanın dört bir yanındaki sunucularda önbelleğe alınır. Buna ek olarak, Microsoft Ajax CDN tarayıcıların farklı etki alanlarında bulunan Web siteleri için önbelleğe alınmış JavaScript dosyalarını yeniden kullanmasına olanak tanır.

Microsoft Ajax Content Delivery Network, Güvenli Yuva Katmanı'nı kullanarak bir web sayfası sunmanız gerektiğinde SSL'yi (HTTPS) destekler.

CDN kullanılamadığında bir geri dönüş uygulayın. Geri dönüşü test edin.

Microsoft Ajax CDN hakkında daha fazla bilgi edinmek için aşağıdaki web sitesini ziyaret edin:

https://www.asp.net/ajaxlibrary/CDN.ashx

ASP.NET ScriptManager, Microsoft Ajax CDN'yi destekler. Tek bir özellik olan EnableCdn özelliğini ayarlayarak, CDN'den tüm ASP.NET framework JavaScript dosyalarını alabilirsiniz:

<asp:ScriptManager ID="sm1" EnableCdn="true" runat="server" />

EnableCdn özelliğini true değerine ayarladıktan sonra, ASP.NET çerçevesi doğrulama için kullanılan tüm JavaScript dosyaları ve UpdatePanel dahil olmak üzere CDN'den tüm ASP.NET çerçeve JavaScript dosyalarını alır. Bu özelliğin ayarlanması, web uygulamanızın performansı üzerinde önemli bir etkiye sahip olabilir.

WebResource özniteliğini kullanarak kendi JavaScript dosyalarınız için CDN yolunu ayarlayabilirsiniz. Yeni CdnPath özelliği, EnableCdn özelliğini true değerine ayarladığınızda kullanılan CDN yolunu belirtir:

[assembly: WebResource("Foo.js", "application/x-javascript", CdnPath = "http://foo.com/foo/bar/foo.js")]

ScriptManager Belirtilmiş Betikler

Geçmişte ASP.NET ScriptManager kullandıysanız, ASP.NET Ajax Kitaplığı'nın monolitik kitaplığının tamamını yüklemeniz gerekiyordu. Yeni ScriptManager.AjaxFrameworkMode özelliğinden yararlanarak, ASP.NET Ajax Kitaplığı'nın tam olarak hangi bileşenlerinin yüklendiğini denetleyebilir ve yalnızca ihtiyacınız olan ASP.NET Ajax Kitaplığı bileşenlerini yükleyebilirsiniz.

ScriptManager.AjaxFrameworkMode özelliği aşağıdaki değerlere ayarlanabilir:

  • Etkinleştirildi -- ScriptManager kontrolünün, çekirdek çerçeve betiklerinin hepsinin birleşik betik dosyası olan MicrosoftAjax.js betik dosyasını otomatik olarak içerdiğini belirtir (eski uygulama).
  • Devre dışı -- Tüm Microsoft Ajax betik özelliklerinin devre dışı bırakıldığını ve ScriptManager denetiminin hiçbir betike otomatik olarak başvurmadığını belirtir.
  • Açık -- Sayfanızın gerektirdiği framework’in çekirdek betik dosyalarına betik başvurularını açıkça dahil edeceğinizi ve her betik dosyasının gerektirdiği bağımlılıklara yönelik başvuruları dahil edeceğinizi ifade eder.

Örneğin, AjaxFrameworkMode özelliğini Explicit değerine ayarlarsanız, ihtiyacınız olan belirli ASP.NET Ajax bileşen betiklerini belirtebilirsiniz:

<asp:ScriptManager ID="sm1" AjaxFrameworkMode="Explicit" runat="server">

<Scripts>
    <asp:ScriptReference Name="MicrosoftAjaxCore.js" />
    <asp:ScriptReference Name="MicrosoftAjaxComponentModel.js" />
    <asp:ScriptReference Name="MicrosoftAjaxSerialization.js" />
    <asp:ScriptReference Name="MicrosoftAjaxNetwork.js" />    
</Scripts>
</asp:ScriptManager>

Web Formları

Web Forms, ASP.NET 1.0 sürümünden bu yana ASP.NET temel bir özellik olmuştur. ASP.NET 4 için bu alanda aşağıdakiler de dahil olmak üzere birçok geliştirme yapılmıştır:

  • Meta etiketleri ayarlama özelliği.
  • Görünüm durumu üzerinde daha fazla denetim.
  • Tarayıcı özellikleriyle çalışmanın daha kolay yolları.
  • Web Forms ile ASP.NET yönlendirmeyi kullanma desteği.
  • Oluşturulan kimlikler üzerinde daha fazla denetim.
  • Seçili satırları veri denetimlerinde kalıcı hale getirmek.
  • FormView ve ListView denetimlerinde işlenmiş HTML üzerinde daha fazla denetim.
  • Veri kaynağı denetimleri için filtreleme desteği.

Page.MetaKeywords ve Page.MetaDescription Özellikleriyle Meta Etiketleri Ayarlama

ASP.NET 4 , Page sınıfına MetaKeywords ve MetaDescription olmak üzere iki özellik ekler. Bu iki özellik, aşağıdaki örnekte gösterildiği gibi sayfanızdaki ilgili meta etiketlerini temsil ediyor:

<head id="Head1" runat="server"> 
  <title>Untitled Page</title> 
  <meta name="keywords" content="These, are, my, keywords" /> 
  <meta name="description" content="This is the description of my page" /> 
</head>

Bu iki özellik, sayfanın Title özelliğiyle aynı şekilde çalışır. Bu kurallar şu kurallara uyar:

  1. Head öğesinde, Page.MetaKeywords için name="keywords" ve Page.MetaDescription için name="description" gibi özellik adlarıyla eşleşen meta etiketleri yoksa (bu da bu özelliklerin ayarlanmadığı anlamına gelir), meta etiketleri sayfa işlendiğinde sayfaya eklenir.
  2. Bu adlara sahip meta etiketleri zaten varsa, bu özellikler mevcut etiketlerin içeriği için get ve set yöntemleri olarak hareket eder.

Bu özellikleri, bir veritabanından veya başka bir kaynaktan içerik almanıza olanak tanıyan ve belirli bir sayfanın ne için olduğunu açıklamak üzere etiketleri dinamik olarak ayarlamanıza olanak tanıyan çalışma zamanında ayarlayabilirsiniz.

Aşağıdaki örnekte olduğu gibi, Web Forms sayfa işaretlemesinin en üstündeki @ Page yönergesinde Anahtar Sözcükler ve Açıklama özelliklerini de ayarlayabilirsiniz:

<%@ Page Language="C#" AutoEventWireup="true" 
  CodeFile="Default.aspx.cs" 
  Inherits="_Default" 
  Keywords="These, are, my, keywords" 
  Description="This is a description" %>

Bu, sayfada önceden bildirilen meta etiketi içeriğini (varsa) geçersiz kılar.

Açıklama meta etiketinin içeriği, Google'da arama listesi önizlemelerini geliştirmek için kullanılır. (Ayrıntılar için Google WebMaster Central blogundaki Meta açıklama yapısı ile kod parçacıklarını iyileştirme bölümüne bakın.) Google ve Windows Live Search anahtar sözcüklerin içeriğini hiçbir şey için kullanmaz, ancak diğer arama motorları kullanabilir.

Bu yeni özellikler basit bir özelliktir, ancak bunları el ile ekleme gereksiniminden veya meta etiketleri oluşturmak için kendi kodunuzu yazmaktan sizi kurtarır.

Tek Tek Denetimler için Görünüm Durumunu Etkinleştirme

Varsayılan olarak, görünüm durumu sayfa için etkinleştirilir ve sonuçta sayfadaki her denetim, uygulama için gerekli olmasa bile görüntüleme durumunu depolar. Görünüm durumu verileri, sayfanın oluşturduğu işaretlemeye dahil edilir ve sayfayı istemciye gönderip geri göndermek için gereken süreyi artırır. Gerekenden daha fazla görünüm durumunun depolanması önemli performans düşüşlerine neden olabilir. ASP.NET önceki sürümlerinde, geliştiriciler sayfa boyutunu küçültmek için tek tek denetimlerin görünüm durumunu devre dışı bırakabiliyordu, ancak bunu tek tek denetimler için açıkça yapmak zorunda kaldılar. ASP.NET 4'te, Web sunucusu denetimleri görünüm durumunu varsayılan olarak devre dışı bırakmanıza ve ardından yalnızca sayfada bunu gerektiren denetimler için etkinleştirmenize olanak tanıyan bir ViewStateMode özelliği içerir.

ViewStateMode özelliği üç değer içeren bir numaralandırma alır: Enabled, Disabled ve Inherit. Etkin, bu denetim için ve Devral olarak ayarlanmış veya hiçbir şey ayarlanmamış alt denetimler için görünüm durumunu etkinleştirir. Devre dışı, görünüm durumunu devre dışı bırakır ve Inherit, denetimin üst denetimden ViewStateMode ayarını kullandığını belirtir.

Aşağıdaki örnekte ViewStateMode özelliğinin nasıl çalıştığı gösterilmektedir. Aşağıdaki sayfadaki denetimlerin işaretlemesi ve kodu ViewStateMode özelliğinin değerlerini içerir:

<form id="form1" runat="server"> 
  <script runat="server"> 
      protected override void OnLoad(EventArgs e) { 
      if (!IsPostBack) { 
        label1.Text = label2.Text = "[DynamicValue]"; 
      } 
      base.OnLoad(e); 
    } 
  </script> 
  <asp:PlaceHolder ID="PlaceHolder1" runat="server" ViewStateMode="Disabled"> 
      Disabled: <asp:Label ID="label1" runat="server" Text="[DeclaredValue]" /><br /> 
    <asp:PlaceHolder ID="PlaceHolder2" runat="server" ViewStateMode="Enabled"> 
        Enabled: <asp:Label ID="label2" runat="server" Text="[DeclaredValue]" /> 
    </asp:PlaceHolder> 
  </asp:PlaceHolder> 
  <hr /> 
  <asp:button ID="Button1" runat="server" Text="Postback" /> 
  <%-- Further markup here --%>

Gördüğünüz gibi, kod PlaceHolder1 denetiminin görünüm durumunu devre dışı bırakır. Alt etiket1 denetimi bu özellik değerini devralır (Devral , denetimler için ViewStateMode için varsayılan değerdir.) ve bu nedenle görünüm durumunu kaydetmez. PlaceHolder2 denetiminde ViewStateModeEtkin olarak ayarlanır, bu nedenle label2 bu özelliği devralır ve görünüm durumunu kaydeder. Sayfa ilk yüklendiğinde, her iki Etiket denetiminin Text özelliği "[DynamicValue]" dizesine ayarlanır.

Bu ayarların etkisi, sayfa ilk kez yüklendiğinde tarayıcıda aşağıdaki çıkışın görüntülenmesidir:

Devre dışı : [DynamicValue]

Etkin:[DynamicValue]

Ancak geri göndermeden sonra aşağıdaki çıkış görüntülenir:

Devre dışı : [DeclaredValue]

Etkin:[DynamicValue]

Label1 denetimi ( ViewStateMode değeri Devre Dışı olarak ayarlanmış olan) kodda ayarlandığı değeri korumadı. Ancak, label2 denetimi ( ViewStateMode değeri Etkin olarak ayarlanmış olan) durumunu korumsdur.

ViewStateMode'yi aşağıdaki örnekte olduğu gibi @ Page yönergesinde de ayarlayabilirsiniz:

<%@ Page Language="C#" AutoEventWireup="true" 
  CodeBehind="Default.aspx.cs" 
  Inherits="WebApplication1._Default" 
  ViewStateMode="Disabled" %>

Page sınıfı yalnızca başka bir denetimdir; sayfadaki diğer tüm denetimler için üst denetim görevi görür. ViewStateMode'un varsayılan değeri, Page örnekleri için Etkin'dir. Denetimler varsayılan olarak Devral olduğundan, ViewStateMode değerini sayfa veya denetim düzeyinde ayarlamadığınız sürece denetimler Enabled özellik değerini devralır.

ViewStateMode özelliğinin değeri, görüntüleme durumunun yalnızca EnableViewState özelliğinin true olarak ayarlanması durumunda korunacak olup olmadığını belirler. EnableViewState özelliği false olarak ayarlanırsa, ViewStateModeEtkin olarak ayarlansa bile görünüm durumu korunmaz.

Bu özelliğin iyi bir kullanımı ana sayfalardaki ContentPlaceHolder denetimleridir. Burada, ana sayfa için ViewStateMode'uDevre Dışı olarak ayarlayabilir ve ardından görünüm durumu gerektiren denetimler içeren ContentPlaceHolder denetimleri için ayrı ayrı etkinleştirebilirsiniz.

Tarayıcı Özelliklerindeki Değişiklikler

ASP.NET, bir kullanıcının tarayıcı özellikleri adlı bir özelliği kullanarak sitenize göz atmak için kullandığı tarayıcının özelliklerini belirler. Tarayıcı özellikleri HttpBrowserCapabilities nesnesiyle temsil edilir ( Request.Browser özelliği tarafından sunulur). Örneğin, geçerli tarayıcının türünün ve sürümünün belirli bir JavaScript sürümünü destekleyip desteklemediğini belirlemek için HttpBrowserCapabilities nesnesini kullanabilirsiniz. Alternatif olarak, isteğin mobil cihazdan kaynaklanıp kaynaklandığını belirlemek için HttpBrowserCapabilities nesnesini de kullanabilirsiniz.

HttpBrowserCapabilities nesnesi bir tarayıcı tanım dosyaları kümesi tarafından yönlendirilir. Bu dosyalar belirli tarayıcıların özellikleri hakkında bilgi içerir. ASP.NET 4'te, bu tarayıcı tanım dosyaları Google Chrome, Research in Motion BlackBerry akıllı telefonlar ve Apple iPhone gibi yakın zamanda tanıtılan tarayıcılar ve cihazlar hakkında bilgi içerecek şekilde güncelleştirildi.

Aşağıdaki listede yeni tarayıcı tanım dosyaları gösterilmektedir:

  • blackberry.browser
  • chrome.browser
  • Default.browser
  • firefox.browser
  • gateway.browser
  • generic.browser
  • Internet Explorer tarayıcısı
  • iemobile.browser
  • iphone.browser
  • opera.browser
  • safari.browser

Tarayıcı Özellikleri Sağlayıcılarını Kullanma

ASP.NET sürüm 3.5 Service Pack 1'de, tarayıcının sahip olduğu özellikleri aşağıdaki yollarla tanımlayabilirsiniz:

  • Bilgisayar düzeyinde, aşağıdaki klasörde bir .browser XML dosyası oluşturur veya güncelleştirirsiniz:

  • \Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\Browsers
    
  • Tarayıcı özelliğini tanımladıktan sonra, tarayıcı özellikleri derlemesini yeniden derlemek ve GAC'ye eklemek için Visual Studio Komut İstemi'nden aşağıdaki komutu çalıştırırsınız:

  • aspnet_regbrowsers.exe -I c
    
  • Tek bir uygulama için, uygulamanın .browser klasöründe bir App_Browsers dosya oluşturursunuz.

Bu yaklaşımlar XML dosyalarını değiştirmenizi gerektirir ve bilgisayar düzeyinde değişiklikler için aspnet_regbrowsers.exe işlemini çalıştırdıktan sonra uygulamayı yeniden başlatmanız gerekir.

ASP.NET 4, tarayıcı özellikleri sağlayıcıları olarak adlandırılan bir özellik içerir. Adından da anlaşılacağı gibi bu, tarayıcı özelliklerini belirlemek için kendi kodunuzu kullanmanıza olanak tanıyan bir sağlayıcı oluşturmanıza olanak tanır.

Uygulamada geliştiriciler genellikle özel tarayıcı özellikleri tanımlamaz. Tarayıcı dosyalarını güncelleştirmek zordur, güncelleştirme işlemi oldukça karmaşıktır ve dosyaların XML söz diziminin .browser kullanımı ve tanımlanması karmaşık olabilir. Bu işlemi çok daha kolay hale getirecek olan şey, ortak bir tarayıcı tanım söz dizimi, güncel tarayıcı tanımlarını içeren bir veritabanı veya böyle bir veritabanına sahip bir web hizmeti olmasıdır. Yeni tarayıcı özellikleri sağlayıcıları özelliği, bu senaryoları üçüncü taraf geliştiriciler için mümkün ve pratik hale getirir.

Yeni ASP.NET 4 tarayıcı özellikleri sağlayıcısı özelliğini kullanmak için iki ana yaklaşım vardır: ASP.NET tarayıcı özellikleri tanımı işlevselliğini genişletmek veya tamamen değiştirmek. Aşağıdaki bölümlerde önce işlevselliğin nasıl değiştirildiği ve ardından nasıl genişletildiği açıklanmaktadır.

ASP.NET Tarayıcı Özellikleri İşlevselliğini Değiştirme

ASP.NET tarayıcı özellikleri tanım işlevselliğini tamamen değiştirmek için şu adımları izleyin:

  1. Aşağıdaki örnekte olduğu gibi , HttpCapabilitiesProvider'dan türetilen ve GetBrowserCapabilities yöntemini geçersiz kılan bir sağlayıcı sınıfı oluşturun:

    public class CustomProvider : HttpCapabilitiesProvider 
    { 
        public override HttpBrowserCapabilities 
        GetBrowserCapabilities(HttpRequest request) 
        { 
            HttpBrowserCapabilities browserCaps = new HttpBrowserCapabilities(); 
            Hashtable values = new Hashtable(180, StringComparer.OrdinalIgnoreCase); 
            values[String.Empty] = request.UserAgent; 
            values["browser"] = "MyCustomBrowser"; 
            browserCaps.Capabilities = values; 
            return browserCaps;
        } 
    }
    

    Bu örnekteki kod, yalnızca browser adlı özelliği belirten ve bu özelliği MyCustomBrowser olarak ayarlayan yeni bir HttpBrowserCapabilities nesnesi oluşturur.

  2. Sağlayıcıyı uygulamaya kaydedin.

    Bir sağlayıcıyı bir uygulamayla kullanmak için, veya dosyalarındaki Web.config bölümüne provider özniteliğini Machine.config eklemeniz gerekir. (Sağlayıcı özniteliklerini, belirli bir mobil cihazın klasöründeki gibi uygulamadaki belirli dizinler için bir konum öğesinde de tanımlayabilirsiniz.) Aşağıdaki örnekte, bir yapılandırma dosyasında sağlayıcı özniteliğinin nasıl ayarlanacağı gösterilmektedir:

    <system.web> 
    <browserCaps provider="ClassLibrary2.CustomProvider, ClassLibrary2, 
      Version=1.0.0.0, Culture=neutral" /> 
    </system.web>
    

    Yeni tarayıcı yetenek tanımını kaydetmenin bir diğer yolu da aşağıdaki örnekte gösterildiği gibi kodu kullanmaktır:

    void Application_Start(object sender, EventArgs e) 
    { 
        HttpCapabilitiesBase.BrowserCapabilitiesProvider =
        new ClassLibrary2.CustomProvider();
        // ... 
     }
    

    Bu kod, dosyanın Application_Start olayında Global.asax çalıştırılmalıdır. BrowserCapabilitiesProvider sınıfında yapılan herhangi bir değişiklik, önbelleğin çözümlenen HttpCapabilitiesBase nesnesi için geçerli bir durumda kaldığından emin olmak için uygulamadaki herhangi bir kod yürütülmeden önce gerçekleşmelidir.

HttpBrowserCapabilities Nesnesini Önbelleğe Alma

Yukarıdaki örnekte bir sorun vardır. Bu sorun, httpbrowserCapabilities nesnesini almak için özel sağlayıcı her çağrıldığında kodun çalışmasıdır. Bu, her istek sırasında birden çok kez gerçekleşebilir. Örnekte sağlayıcının kodu çok fazla işlem yapmaz. Ancak, özel sağlayıcınızdaki kod HttpBrowserCapabilities nesnesini almak için önemli bir çalışma gerçekleştirirse, bu durum performansı etkileyebilir. Bunun olmasını önlemek için HttpBrowserCapabilities nesnesini önbelleğe alabilirsiniz. Aşağıdaki adımları izleyin:

  1. Aşağıdaki örnekteki gibi HttpCapabilitiesProvider'dan türetilen bir sınıf oluşturun:

    public class CustomProvider : HttpCapabilitiesProvider 
    { 
        public override HttpBrowserCapabilities 
        GetBrowserCapabilities(HttpRequest request) 
        { 
            string cacheKey = BuildCacheKey(); 
            int cacheTime = GetCacheTime(); 
            HttpBrowserCapabilities browserCaps = 
            HttpContext.Current.Cache[cacheKey] as 
            HttpBrowserCapabilities; 
            if (browserCaps == null) 
            { 
                HttpBrowserCapabilities browserCaps = new 
                HttpBrowserCapabilities(); 
                Hashtable values = new Hashtable(180, 
                StringComparer.OrdinalIgnoreCase); 
                values[String.Empty] = request.UserAgent; 
                values["browser"] = "MyCustomBrowser"; 
                browserCaps.Capabilities = values; 
                HttpContext.Current.Cache.Insert(cacheKey, 
                browserCaps, null, DateTime.MaxValue, 
                TimeSpan.FromSeconds(cacheTime));
            } 
            return browserCaps; 
        } 
    }
    

    Örnekte kod, özel bir BuildCacheKey yöntemini çağırarak bir önbellek anahtarı oluşturur ve özel bir GetCacheTime yöntemi çağırarak önbelleğe alma süresini alır. Kod daha sonra çözümlenen HttpBrowserCapabilities nesnesini önbelleğe ekler. Nesnesi önbellekten alınabilir ve özel sağlayıcıyı kullanan sonraki isteklerde yeniden kullanılabilir.

  2. Yukarıdaki yordamda açıklandığı gibi sağlayıcıyı uygulamaya kaydedin.

ASP.NET Tarayıcı Özellikleri İşlevselliğini Genişletme

Önceki bölümde, ASP.NET 4'te yeni bir HttpBrowserCapabilities nesnesinin nasıl oluşturulacağı açıklanmıştır. ASP.NET üzerindeki mevcut tarayıcı özelliklerine yenilerini ekleyerek ASP.NET'in tarayıcı özellikleri işlevselliğini genişletebilirsiniz. Bunu XML tarayıcı tanımlarını kullanmadan yapabilirsiniz. Aşağıdaki yordamda nasıl olduğu gösterilmektedir.

  1. Aşağıdaki örnekte gösterildiği gibi , HttpCapabilitiesEvaluator'dan türetilen ve GetBrowserCapabilities yöntemini geçersiz kılan bir sınıf oluşturun:

    public class CustomProvider : HttpCapabilitiesEvaluator 
    { 
        public override HttpBrowserCapabilities 
        GetBrowserCapabilities(HttpRequest request) 
        { 
            HttpBrowserCapabilities browserCaps = 
            base.GetHttpBrowserCapabilities(request);
            if (browserCaps.Browser == "Unknown") 
            { 
                browserCaps = MyBrowserCapabilitiesEvaulator(request); 
            } 
            return browserCaps; 
        } 
    }
    

    Bu kod, tarayıcıyı tanımlamaya çalışmak için önce ASP.NET tarayıcı özellikleri işlevselliğini kullanır. Ancak, istekte tanımlanan bilgilere göre bir tarayıcı tanımlanmadıysa (httpbrowserCapabilities nesnesinin Browser özelliği "Bilinmiyor" dizesiyse), kod tarayıcıyı tanımlamak için özel sağlayıcıyı (MyBrowserCapabilitiesEvaluator) çağırır.

  2. Sağlayıcıyı önceki örnekte açıklandığı gibi uygulamaya kaydedin.

Mevcut Yetenek Tanımlarına Yeni Özellikler Ekleyerek Tarayıcı Özellikleri İşlevselliğini Genişletme

Özel tarayıcı tanım sağlayıcısı oluşturmaya ve dinamik olarak yeni tarayıcı tanımları oluşturmaya ek olarak, mevcut tarayıcı tanımlarını ek özelliklerle genişletebilirsiniz. Bu, istediğinize yakın ancak yalnızca birkaç özelliği olmayan bir tanım kullanmanıza olanak tanır. Bunu yapmak için aşağıdaki adımları kullanın.

  1. Aşağıdaki örnekte gösterildiği gibi , HttpCapabilitiesEvaluator'dan türetilen ve GetBrowserCapabilities yöntemini geçersiz kılan bir sınıf oluşturun:

    public class CustomProvider : HttpCapabilitiesEvaluator 
    { 
        public override HttpBrowserCapabilities 
        GetBrowserCapabilities(HttpRequest request) 
        { 
            HttpBrowserCapabilities browserCaps = 
              base.GetHttpBrowserCapabilities(request); 
            if (browserCaps.Browser == "Unknown") 
            { 
                browserCaps = MyBrowserCapabilitiesEvaulator(request); 
            } 
            return browserCaps; 
        }
    }
    

    Örnek kod, mevcut ASP.NET httpcapabilitiesEvaluator sınıfını genişletir ve aşağıdaki kodu kullanarak geçerli istek tanımıyla eşleşen HttpBrowserCapabilities nesnesini alır:

    HttpBrowserCapabilities browserCaps = 
        base.GetHttpBrowserCapabilities(request);
    

    Kod daha sonra bu tarayıcı için bir özellik ekleyebilir veya değiştirebilir. Yeni bir tarayıcı özelliği belirtmenin iki yolu vardır:

    • HttpCapabilitiesBase nesnesinin Capabilities özelliği tarafından kullanıma sunulan IDictionary nesnesine bir anahtar/değer çifti ekleyin. Önceki örnekte kod, true değerine sahip MultiTouch adlı bir özellik ekler.

    • HttpCapabilitiesBase nesnesinin mevcut özelliklerini ayarlayın. Önceki örnekte kod, Frames özelliğini true olarak ayarlar. Bu özellik, IDictionary nesnesini Capabilities özelliği aracılığıyla kullanıma sunan basit bir erişimcidir.

      Uyarı

      Not Bu model, denetim bağdaştırıcıları da dahil olmak üzere HttpBrowserCapabilities'in tüm özellikleri için geçerlidir.

  2. Önceki yordamda açıklandığı gibi sağlayıcıyı uygulamaya kaydedin.

ASP.NET 4'te yönlendirme

ASP.NET 4, Web Forms ile yönlendirmeyi kullanmak için yerleşik destek ekler. Yönlendirme, bir uygulamayı fiziksel dosyalarla eşleşmeyen istek URL'lerini kabul etmek üzere yapılandırmanıza olanak tanır. Bunun yerine, yönlendirmeyi kullanarak kullanıcılar için anlamlı olan ve uygulamanız için arama altyapısı iyileştirmesine (SEO) yardımcı olabilecek URL'leri tanımlayabilirsiniz. Örneğin, var olan bir uygulamada ürün kategorilerini görüntüleyen bir sayfanın URL'si aşağıdaki örneğe benzer olabilir:

http://website/products.aspx?categoryid=12

Yönlendirmeyi kullanarak, aynı bilgileri işlemek için uygulamayı aşağıdaki URL'yi kabul etmek üzere yapılandırabilirsiniz:

http://website/products/software

yönlendirme, ASP.NET 3.5 SP1 ile başlayarak kullanılabilir. (ASP.NET 3.5 SP1'de yönlendirmenin nasıl kullanılacağına ilişkin bir örnek için Phil Haack'ın blogundaki WebForms ile Yönlendirmeyi kullanma.) Ancak ASP.NET 4, yönlendirmeyi kullanmayı kolaylaştıran aşağıdakiler de dahil olmak üzere bazı özellikler içerir:

  • Yolları tanımlarken kullandığınız basit bir HTTP işleyicisi olan PageRouteHandler sınıfı. sınıfı, isteğin yönlendirıldığı sayfaya veri geçirir.
  • HttpRequest.RequestContext ve Page.RouteData olarak yeni özellikler, (HttpRequest.RequestContext.RouteData nesnesinin vekil nesnesidir). Bu özellikler, yoldan geçirilen bilgilere erişmeyi kolaylaştırır.
  • System.Web.Compilation.RouteUrlExpressionBuilder ve System.Web.Compilation.RouteValueExpressionBuilder içinde tanımlanan aşağıdaki yeni ifade oluşturucuları:
  • RouteUrl, ASP.NET sunucu denetimindeki bir yol URL'sine karşılık gelen bir URL oluşturmak için basit bir yol sağlar.
  • RouteContext nesnesinden bilgi ayıklamak için basit bir yol sağlayan RouteValue .
  • RouteParameter sınıfı, bir RouteContext nesnesindeki verileri veri kaynağı denetimi sorgusuna geçirmeyi kolaylaştırır (FormParameter'a benzer).

Web Forms Sayfaları için Yönlendirme

Aşağıdaki örnekte, Route sınıfının yeni MapPageRoute yöntemini kullanarak bir Web Forms yolunun nasıl tanımlanacağı gösterilmektedir:

public class Global : System.Web.HttpApplication 
{ 
    void Application_Start(object sender, EventArgs e) 
    { 
        RouteTable.Routes.MapPageRoute("SearchRoute", 
          "search/{searchterm}", "~/search.aspx"); 
        RouteTable.Routes.MapPageRoute("UserRoute", 
          "users/{username}", "~/users.aspx"); 
    } 
}

ASP.NET 4 , MapPageRoute yöntemini tanıtır. Aşağıdaki örnek, önceki örnekte gösterilen SearchRoute tanımına eşdeğerdir, ancak PageRouteHandler sınıfını kullanır.

RouteTable.Routes.Add("SearchRoute", new Route("search/{searchterm}", 
  new PageRouteHandler("~/search.aspx")));

Örnekteki kod, rotayı fiziksel bir sayfaya eşler (ilk rotada ~/search.aspx 'ye). İlk yol tanımı, searchterm adlı parametrenin URL'den ayıklanıp sayfaya geçirilmesi gerektiğini de belirtir.

MapPageRoute yöntemi aşağıdaki yöntem aşırı yüklemelerini destekler:

  • MapPageRoute(string routeName, string routeUrl, string physicalFile, bool checkPhysicalUrlAccess)
  • MapPageRoute(string routeName, string routeUrl, string physicalFile, bool checkPhysicalUrlAccess, RouteValueDictionary defaults)
  • MapPageRoute(string routeName, string routeUrl, string physicalFile, bool checkPhysicalUrlAccess, RouteValueDictionary defaults, RouteValueDictionary kısıtlamaları)

checkPhysicalUrlAccess parametresi, yolun yönlendirilmekte olan fiziksel sayfanın güvenlik izinlerini (bu örnekte search.aspx) ve gelen URL üzerindeki izinleri (bu durumda search/{searchterm}) denetleyip denetlemeyeceğini belirtir. checkPhysicalUrlAccess değeri false ise, yalnızca gelen URL'nin izinleri denetlenecektir. Bu izinler dosyada Web.config aşağıdaki gibi ayarlar kullanılarak tanımlanır:

<configuration> 
  <location path="search.aspx"> 
    <system.web> 
      <authorization> 
        <allow roles="admin"/> 
        <deny users="*"/> 
      </authorization> 
    </system.web> 
  </location> 
  <location path="search"> 
    <system.web> 
      <authorization> 
        <allow users="*"/> 
      </authorization> 
    </system.web> 
  </location> 

</configuration>

Örnek yapılandırmada, yönetici rolündekiler dışında tüm kullanıcılar için fiziksel sayfaya search.aspx erişim reddedilir. checkPhysicalUrlAccess parametresi true (varsayılan değeridir) olarak ayarlandığında, fiziksel sayfa search.aspx bu roldeki kullanıcılarla sınırlı olduğundan yalnızca yönetici kullanıcıların /search/{searchterm} URL'sine erişmesine izin verilir. checkPhysicalUrlAccessfalse olarak ayarlanırsa ve site önceki örnekte gösterildiği gibi yapılandırılırsa, kimliği doğrulanmış tüm kullanıcıların /search/{searchterm} URL'sine erişmesine izin verilir.

Web Forms Sayfasında Yönlendirme Bilgilerini Okuma

Web Forms fiziksel sayfasının kodunda, yönlendirmenin url'den ayıkladığı bilgilere (veya başka bir nesnenin RouteData nesnesine eklediği diğer bilgilere) iki yeni özellik kullanarak erişebilirsiniz: HttpRequest.RequestContext ve Page.RouteData. (Page.RouteData, HttpRequest.RequestContext.RouteData sarmalar.) Aşağıdaki örnekte Page.RouteData'nın nasıl kullanılacağı gösterilmektedir.

protected void Page_Load(object sender, EventArgs e) 
{ 
    string searchterm = Page.RouteData.Values["searchterm"] as string; 
    label1.Text = searchterm; 
}

Kod, daha önce örnek yolda tanımlandığı gibi searchterm parametresi için geçirilen değeri ayıklar. Aşağıdaki istek URL'sini göz önünde bulundurun:

http://localhost/search/scott/

Bu istek yapıldığında "scott" sözcüğü sayfada görünecek şekilde işlenecektir (search.aspx).

İşaretlemede Yönlendirme Bilgilerine Erişme

Önceki bölümde açıklanan yöntem, Bir Web Forms sayfasında kodda yol verilerinin nasıl alınıldığını gösterir. İşaretlemeyi kullanarak da aynı bilgilere erişmenizi sağlayabilirsiniz. İfade oluşturucuları bildirim temelli kodla çalışmanın güçlü ve zarif bir yoludur. (Daha fazla bilgi için Phil Haack'ın blogundaki Express Yourself With Custom Expression Builders girdisine bakın.)

ASP.NET 4, Web Forms yönlendirmesi için iki yeni ifade oluşturucu içerir. Aşağıdaki örnekte bunların nasıl kullanılacağı gösterilmektedir.

<asp:HyperLink ID="HyperLink1" runat="server" 
  NavigateUrl="<%$RouteUrl:SearchTerm=scott%>">Search for Scott</asp:HyperLink>

Örnekte RouteUrl ifadesi, yol parametresini temel alan bir URL tanımlamak için kullanılır. Bu, tüm URL'yi işaretlemeye sabit kodlamaktan kurtarır ve daha sonra bu bağlantıda herhangi bir değişiklik yapmadan URL yapısını değiştirmenize olanak tanır.

Bu işaretleme, daha önce tanımlanan yola bağlı olarak aşağıdaki URL'yi oluşturur:

http://localhost/search/scott

ASP.NET giriş parametrelerine göre doğru yolu (yani doğru URL'yi oluşturur) otomatik olarak çalışır. İfadeye kullanılacak bir yol belirtmenize olanak tanıyan bir yol adı da ekleyebilirsiniz.

Aşağıdaki örnekte RouteValue ifadesinin nasıl kullanılacağı gösterilmektedir .

<asp:Label ID="Label1" runat="server" Text="<%$RouteValue:SearchTerm%>" />

Bu denetimi içeren sayfa çalıştığında, etikette "scott" değeri görüntülenir.

RouteValue ifadesi, yönlendirme verilerini işaretlemede kullanmayı basitleştirir ve işaretlemede daha karmaşık Page.RouteData["x"] söz dizimi ile çalışmak zorunda kalmamasını sağlar.

Veri Kaynağı Denetim Parametreleri için Yönlendirme Verilerini Kullanma

RouteParameter sınıfı, veri kaynağı denetimindeki sorgular için parametre değeri olarak yol verilerini belirtmenize olanak tanır. Aşağıdaki örnekte gösterildiği gibi sınıfına çok benzer şekilde çalışır :

<asp:sqldatasource id="SqlDataSource1" runat="server" 
    connectionstring="<%$ ConnectionStrings:MyNorthwind %>" 
    selectcommand="SELECT CompanyName,ShipperID FROM Shippers where 
      CompanyName=@companyname" 
  <selectparameters> 
    <asp:routeparameter name="companyname" RouteKey="searchterm" /> 
  </selectparameters> 

</asp:sqldatasource>

Bu durumda, @companyname deyimindeki parametre için yol parametresi searchterm değeri kullanılır.

İstemci Kimliklerini Ayarlama

Yeni ClientIDMode özelliği, ASP.NET uzun süredir devam eden bir sorunu, yani denetimlerin işledikleri öğeler için kimlik özniteliğini nasıl oluşturduğunu giderir. Uygulamanız bu öğelere başvuran istemci betiği içeriyorsa, işlenen öğeler için kimlik özniteliğini bilmek önemlidir.

Web sunucusu denetimleri için işlenen HTML'deki kimlik özniteliği, denetimin ClientID özelliğine göre oluşturulur. ASP.NET 4'e kadar ClientID özelliğinden id özniteliğini oluşturmaya yönelik algoritma, adlandırma kapsayıcısını (varsa) kimlikle ve yinelenen denetimler söz konusu olduğunda (veri denetimlerinde olduğu gibi) bir önek ve sıralı sayı eklemek için birleştirmekti. Bu her zaman sayfadaki denetimlerin kimliklerinin benzersiz olmasını garanti etse de, algoritma tahmin edilebilir olmayan ve bu nedenle istemci betiğinde başvurması zor olan denetim kimlikleriyle sonuçlanmıştır.

Yeni ClientIDMode özelliği, denetimler için istemci kimliğinin nasıl oluşturulduğunu daha hassas bir şekilde belirtmenizi sağlar. Sayfa da dahil olmak üzere tüm denetimler için ClientIDMode özelliğini ayarlayabilirsiniz. Olası ayarlar şunlardır:

  • AutoID : Bu, ASP.NET'nin önceki sürümlerinde kullanılan ClientID özellik değerlerini oluşturmaya yönelik algoritmaya eşdeğerdir.
  • Statik – Bu, ClientID değerinin, üst adlandırma kapsayıcılarının kimliklerini birleştirmeden, ID değeri ile aynı olacağını belirtir. Bu, Web kullanıcı denetimlerinde yararlı olabilir. Bir Web kullanıcı denetimi farklı sayfalarda ve farklı kapsayıcı denetimlerinde bulunabildiğinden, Kimlik değerlerinin ne olacağını tahmin edemeyeceğiniz için AutoID algoritmasını kullanan denetimler için istemci betiği yazmak zor olabilir.
  • Öngörülebilir – Bu seçenek öncelikli olarak yinelenen şablonları kullanan veri denetimlerinde kullanılır. Denetimin adlandırma kapsayıcılarının kimlik özelliklerini birleştirir, ancak oluşturulan ClientID değerleri "ctlxxx" gibi dizeler içermez. Bu ayar denetimin ClientIDRowSuffix özelliğiyle birlikte çalışır. ClientIDRowSuffix özelliğini bir veri alanının adına ayarlarsınız ve bu alanın değeri oluşturulan ClientID değerinin son eki olarak kullanılır. Genellikle bir veri kaydının birincil anahtarını ClientIDRowSuffix değeri olarak kullanırsınız.
  • Devral – Bu ayar denetimler için varsayılan davranıştır; bir denetimin kimlik oluşturma işleminin üst öğesiyle aynı olduğunu belirtir.

ClientIDMode özelliğini sayfa düzeyinde ayarlayabilirsiniz. Bu, geçerli sayfadaki tüm denetimler için varsayılan ClientIDMode değerini tanımlar.

Sayfa düzeyindeki varsayılan ClientIDMode değeri AutoID ve denetim düzeyindeki varsayılan ClientIDMode değeri Devral. Sonuç olarak, bu özelliği kodunuzun herhangi bir yerinde ayarlamazsanız, tüm denetimler varsayılan olarak AutoID algoritmasına ayarlanır.

Aşağıdaki örnekte gösterildiği gibi @ Page yönergesinde sayfa düzeyi değerini ayarlarsınız:

<%@ Page Language="C#" AutoEventWireup="true" 
  CodeFile="Default.aspx.cs" 
  Inherits="_Default" 
  ClientIDMode="Predictable" %>

Ayrıca, yapılandırma dosyasındaki ClientIDMode değerini bilgisayar (makine) düzeyinde veya uygulama düzeyinde de ayarlayabilirsiniz. Bu, uygulamadaki tüm sayfalardaki tüm denetimler için varsayılan ClientIDMode ayarını tanımlar. Değeri bilgisayar düzeyinde ayarlarsanız, o bilgisayardaki tüm Web siteleri için varsayılan ClientIDMode ayarını tanımlar. Aşağıdaki örnekte, yapılandırma dosyasındaki ClientIDMode ayarı gösterilmektedir:

<system.web> 
  <pages clientIDMode="Predictable"></pages> 
</system.web>

Daha önce belirtildiği gibi ClientID özelliğinin değeri, denetimin üst öğesinin adlandırma kapsayıcısından türetilir. Ana sayfaları kullanırken olduğu gibi bazı senaryolarda, denetimler aşağıdaki işlenmiş HTML'deki gibi kimliklerle sonuçlanabilir:

<div id="ctl00_ContentPlaceHolder1_ParentPanel"> 
  <div id="ctl00_ContentPlaceHolder1_ParentPanel_NamingPanel1"> 
    <input name="ctl00$ContentPlaceHolder1$ParentPanel$NamingPanel1$TextBox1" 
      type="text" value="Hello!" 
      id="ctl00_ContentPlaceHolder1_ParentPanel_NamingPanel1_TextBox1" /> 
</div>

İşaretlemede gösterilen giriş öğesi ( TextBox denetiminden) sayfanın derinlerinde yalnızca iki adlandırma kapsayıcısı (iç içe ContentPlaceholder denetimleri) olsa da, ana sayfaların işlenme şekli nedeniyle, sonuç aşağıdakine benzer bir denetim kimliğidir:

ctl00_ContentPlaceHolder1_ParentPanel_NamingPanel1_TextBox1

Bu kimliğin sayfada benzersiz olması garanti edilir, ancak çoğu amaç için gereksiz yere uzundur. İşlenen kimliğin uzunluğunu azaltmak ve kimliğin nasıl oluşturulduğu üzerinde daha fazla denetim sahibi olmak istediğinizi düşünün. (Örneğin, "ctlx" ön eklerini ortadan kaldırmak istiyorsunuz.) Bunu yapmanın en kolay yolu, aşağıdaki örnekte gösterildiği gibi ClientIDMode özelliğini ayarlamaktır:

<tc:NamingPanel runat="server" ID="ParentPanel" ClientIDMode="Static"> 
  <tc:NamingPanel runat="server" ID="NamingPanel1" ClientIDMode="Predictable"> 
    <asp:TextBox ID="TextBox1" runat="server" Text="Hello!"></asp:TextBox> 
  </tc:NamingPanel> 

</tc:NamingPanel>

Bu örnekte, ClientIDMode özelliği en dıştaki NamingPanel öğesi için Static olarak ve iç NamingControl öğesi için Predictable olarak ayarlanır. Bu ayarlar aşağıdaki işaretlemeyle sonuçlanır (sayfanın geri kalanı ve ana sayfanın önceki örnektekiyle aynı olduğu varsayılır):

<div id="ParentPanel"> 
  <div id="ParentPanel_NamingPanel1"> 
    <input name="ctl00$ContentPlaceHolder1$ParentPanel$NamingPanel1$TextBox1" 
        type="text" value="Hello!" id="ParentPanel_NamingPanel1_TextBox1" /> 
</div>

Statik ayarı, en dıştaki NamingPanel öğesi içindeki tüm denetimler için adlandırma hiyerarşisini sıfırlamanın ve oluşturulan kimlikten ContentPlaceHolder ve MasterPage kimliklerini ortadan kaldırmanın etkisine sahiptir. (İşlenen öğelerin ad özniteliği etkilenmez, bu nedenle normal ASP.NET işlevi olaylar, görünüm durumu vb. için korunur.) Adlandırma hiyerarşisini sıfırlamanın bir yan etkisi, NamingPanel öğelerinin işaretlemesini farklı bir ContentPlaceholder denetimine taşısanız bile, işlenen istemci kimliklerinin aynı kalmasıdır.

Uyarı

Not İşlenen denetim kimliklerinin benzersiz olduğundan emin olmak size bağlı. Değilse, istemci document.getElementById işlevi gibi tek tek HTML öğeleri için benzersiz kimlikler gerektiren tüm işlevleri bozabilir.

Data-Bound Denetimlerinde Tahmin Edilebilir İstemci Kimlikleri Oluşturma

Eski algoritma tarafından bir veriye bağlı liste denetimindeki denetimler için oluşturulan ClientID değerleri uzun olabilir ve gerçekten tahmin edilebilir değildir. ClientIDMode işlevi, bu kimliklerin nasıl oluşturulduğu üzerinde daha fazla denetim sahibi olmanıza yardımcı olabilir.

Aşağıdaki örnekteki işaretleme bir ListView denetimi içerir:

<asp:ListView ID="ListView1" runat="server" DataSourceID="SqlDataSource1" 
    OnSelectedIndexChanged="ListView1_SelectedIndexChanged" 
    ClientIDMode="Predictable" 
    RowClientIDRowSuffix="ProductID"> 
</asp:ListView>

Önceki örnekte ClientIDMode ve RowClientIDRowSuffix özellikleri işaretleme olarak ayarlanmıştır. ClientIDRowSuffix özelliği yalnızca veriye bağlı denetimlerde kullanılabilir ve davranışı kullandığınız denetime bağlı olarak değişir. Farklar şunlardır:

  • GridView denetimi — Veri kaynağındaki bir veya daha fazla sütunun adını belirtebilirsiniz; bunlar çalışma zamanında birleştirilerek istemci kimlikleri oluşturulur. Örneğin, RowClientIDRowSuffix değerini "ProductName, ProductId" olarak ayarlarsanız, işlenen öğelerin denetim kimlikleri aşağıdakine benzer bir biçime sahip olur:

  • rootPanel_GridView1_ProductNameLabel_Chai_1
    
  • ListView denetimi — Veri kaynağında istemci kimliğine eklenen tek bir sütun belirtebilirsiniz. Örneğin, ClientIDRowSuffix değerini "ProductName" olarak ayarlarsanız, işlenen denetim kimlikleri aşağıdakine benzer bir biçime sahip olur:

  • rootPanel_ListView1_ProductNameLabel_1
    
  • Bu durumda, sondaki 1, geçerli veri öğesinin ürün kimliğinden türetilir.

  • Repeater denetimi— Bu denetim ClientIDRowSuffix özelliğini desteklemez. Repeater denetiminde geçerli satırın dizini kullanılır. Repeater denetimiyle ClientIDMode="Predictable" kullandığınızda, aşağıdaki biçime sahip istemci kimlikleri oluşturulur:

  • Repeater1_ProductNameLabel_0
    
  • Sondaki 0, geçerli satırın dizinidir.

FormView ve DetailsView denetimleri birden çok satır görüntülemediğinden ClientIDRowSuffix özelliğini desteklemez.

Veri Kontrollerinde Satır Seçimini Kalıcı Hale Getirme

GridView ve ListView denetimleri kullanıcıların bir satır seçmesine izin verebilir. ASP.NET'ın önceki sürümlerinde, seçim sayfadaki satır dizinine göre yapılmıştır. Örneğin, 1. sayfada üçüncü öğeyi seçip 2. sayfaya geçerseniz, bu sayfadaki üçüncü öğe seçilir.

Kalıcı seçim başlangıçta yalnızca .NET Framework 3.5 SP1'deki Dinamik Veri projelerinde destekleniyordu. Bu özellik etkinleştirildiğinde, geçerli seçili öğe öğenin veri anahtarını temel alır. Başka bir deyişle, 1. sayfada üçüncü satırı seçip 2. sayfaya geçerseniz, 2. sayfada hiçbir şey seçilmez. 1. sayfaya geri döndüğünüzde üçüncü satır seçili kalır. Kalıcı seçim artık aşağıdaki örnekte gösterildiği gibi EnablePersistedSelection özelliği kullanılarak tüm projelerde GridView ve ListView denetimleri için desteklenmektedir:

<asp:GridView id="GridView2" runat="server" EnablePersistedSelection="true"> 
</asp:GridView>

ASP.NET Grafik Kontrolü

ASP.NET Grafiği denetimi, .NET Framework'teki veri görselleştirme tekliflerini genişletir. Grafik denetimini kullanarak, karmaşık istatistiksel veya finansal analiz için sezgisel ve görsel olarak cazip grafiklere sahip ASP.NET sayfalar oluşturabilirsiniz. ASP.NET Grafiği denetimi .NET Framework sürüm 3.5 SP1 sürümüne bir eklenti olarak sunulmuştur ve .NET Framework 4 sürümünün bir parçasıdır.

Denetim aşağıdaki özellikleri içerir:

  • 35 farklı grafik türü.
  • Sınırsız sayıda grafik alanı, başlık, gösterge ve ek açıklama.
  • Tüm grafik öğeleri için çok çeşitli görünüm ayarları.
  • Çoğu grafik türü için 3-B desteği.
  • Veri noktalarına otomatik olarak sığabilen akıllı veri etiketleri.
  • Şerit çizgileri, ölçek sonları ve logaritmik ölçeklendirme.
  • Veri analizi ve dönüşümü için 50'den fazla finansal ve istatistiksel formül.
  • Grafik verilerinin basit bağlama ve işlemesi.
  • Tarihler, saatler ve para birimi gibi yaygın veri biçimleri için destek.
  • Ajax kullanan istemci tıklama olayları da dahil olmak üzere etkileşim ve olay odaklı özelleştirme desteği.
  • Durum yönetimi.
  • İkili veri akışı.

Aşağıdaki rakamlar, ASP.NET Grafiği denetimi tarafından üretilen finansal grafik örneklerini göstermektedir.

ASP.NET grafik denetimi tarafından üretilen dört örnek finansal grafik.

Şekil 2: ASP.NET Grafik denetimi örnekleri

ASP.NET Grafiği denetimini kullanma hakkında daha fazla örnek için MSDN Web sitesindeki Microsoft Grafik Denetimleri için Örnekler Ortamı sayfasındaki örnek kodu indirin. Grafik Denetimi Forumu'nda daha fazla topluluk içeriği örneği bulabilirsiniz.

ASP.NET Sayfasına Grafik Denetimi Ekleme

Aşağıdaki örnekte, işaretleme kullanarak bir ASP.NET sayfasına Grafik denetiminin nasıl ekleneceği gösterilmektedir. Örnekte , Grafik denetimi statik veri noktaları için bir sütun grafik oluşturur.

<asp:Chart ID="Chart1" runat="server"> 
  <Series> 
    <asp:Series Name="Series1" ChartType="Column"> 
      <Points> 
        <asp:DataPoint AxisLabel="Product A" YValues="345"/> 
        <asp:DataPoint AxisLabel="Product B" YValues="456"/> 
        <asp:DataPoint AxisLabel="Product C" YValues="125"/> 
        <asp:DataPoint AxisLabel="Product D" YValues="957"/> &

      lt;/Points> 
    </asp:Series> 
  </Series> 
  <ChartAreas> 
    <asp:ChartArea Name="ChartArea1"> 
      <AxisY IsLogarithmic="True" /> 
    </asp:ChartArea> 
  </ChartAreas> 
  <Legends> 
    <asp:Legend Name="Legend1" Title="Product Sales" /> 
  </Legends> 

</asp:Chart>

3B Grafikler Kullanma

Grafik denetimi, grafik alanlarının özelliklerini tanımlayan ChartArea nesnelerini içerebilen bir ChartAreas koleksiyonu içerir. Örneğin, grafik alanı için 3-B kullanmak için aşağıdaki örnekte olduğu gibi Area3DStyle özelliğini kullanın:

<asp:ChartArea Name="ChartArea1"> 
  <area3dstyle 
      Rotation="10" 
      Perspective="10" 
      Enable3D="True" 
      Inclination="15" 
      IsRightAngleAxes="False" 
      WallWidth="0" 
      IsClustered="False" /> 
      
  <%-- Additional markup here --%> 
</asp:ChartArea>

Aşağıdaki şekilde, Çubuk grafik türünde dört seriye sahip bir 3-B grafik gösterilmektedir.

Çubuk grafik türünün dört serisini gösteren 3 boyutlu çubuk grafik.

Şekil 3: 3D Çubuk Grafik

Ölçek Kesmelerini ve Logaritmik Ölçekleri Kullanma

Ölçek kesmeleri ve logaritmik ölçekler, grafiğe gelişmişlik katmanın iki yoludur. Bu özellikler bir grafik alanındaki her eksene özeldir. Örneğin, grafik alanının birincil Y ekseninde bu özellikleri kullanmak için, ChartArea nesnesinde AxisY.IsLogarithmic ve ScaleBreakStyle özelliklerini kullanın. Aşağıdaki kod parçacığında, birincil Y ekseninde ölçek sonlarının nasıl kullanılacağı gösterilmektedir.

<asp:ChartArea Name="ChartArea1">

  <axisy>

    <ScaleBreakStyle 
        BreakLineStyle="Wave" 
        CollapsibleSpaceThreshold="40" 
        Enabled="True" />
  </axisy>

<%-- Additional markup here --%>
</asp:ChartArea>

Aşağıdaki şekilde, ölçek kesintilerinin etkinleştirildiği Y ekseni gösterilmektedir.

Ölçek sonlarının etkinleştirildiği Y eksenini gösteren çubuk grafik.

Şekil 4: Ölçek Kesmeleri

QueryExtender Denetimiyle Verileri Filtreleme

Veri odaklı Web sayfaları oluşturan geliştiriciler için çok yaygın bir görev, verileri filtrelemektir. Bu, geleneksel olarak veri kaynağı denetimlerinde Where yan tümceleri oluşturarak gerçekleştirilir. Bu yaklaşım karmaşık olabilir ve bazı durumlarda Where söz dizimi temel alınan veritabanının tüm işlevselliğinden yararlanmanıza izin vermez.

Filtrelemeyi kolaylaştırmak için ASP.NET 4'te yeni bir QueryExtender denetimi eklendi. Bu denetimler tarafından döndürülen verileri filtrelemek için EntityDataSource veya LinqDataSource denetimlerine eklenebilir. QueryExtender denetimi LINQ'a bağlı olduğundan, veriler sayfaya gönderilmeden önce filtre veritabanı sunucusuna uygulanır ve bu da çok verimli işlemlere neden olur.

QueryExtender denetimi çeşitli filtre seçeneklerini destekler. Aşağıdaki bölümlerde bu seçenekler açıklanır ve bunların nasıl kullanılacağına ilişkin örnekler sağlanır.

Arama seçeneği için , QueryExtender denetimi belirtilen alanlarda bir arama gerçekleştirir. Aşağıdaki örnekte denetim, TextBoxSearch denetimine girilen metni kullanır ve ProductName denetiminden döndürülen verilerdeki Supplier.CompanyName ve sütunlarında içeriğini arar.

<asp:LinqDataSource ID="dataSource" runat="server"> TableName="Products"> 
</asp:LinqDataSource> 
<asp:QueryExtender TargetControlID="dataSource" runat="server"> 
  <asp:SearchExpression DataFields="ProductName, Supplier.CompanyName" 
      SearchType="StartsWith"> 
    <asp:ControlParameter ControlID="TextBoxSearch" /> 
  </asp:SearchExpression> 
</asp:QueryExtender>

Menzil

Aralık seçeneği arama seçeneğine benzer, ancak aralığı tanımlamak için bir değer çifti belirtir. Aşağıdaki örnekte, QueryExtender denetimi UnitPrice denetiminden döndürülen verilerdeki sütunda arama yapar. Aralık, sayfadaki TextBoxFrom ve TextBoxTo denetimlerinden okunur.

<asp:LinqDataSource ID="dataSource" runat="server"> TableName="Products"> 
</asp:LinqDataSource> 
<asp:QueryExtender TargetControlID="dataSource" runat="server"> 
  <asp:RangeExpression DataField="UnitPrice" MinType="Inclusive" 
      MaxType="Inclusive"> 
    <asp:ControlParameter ControlID="TextBoxFrom" /> 
    <asp:ControlParameter ControlID="TexBoxTo" /> 
  </asp:RangeExpression> 

</asp:QueryExtender>

PropertyExpression

Özellik ifadesi seçeneği, bir özellik değeriyle karşılaştırma tanımlamanızı sağlar. İfade true olarak değerlendirilirse, incelenen veriler döndürülür. Aşağıdaki örnekte QueryExtender denetimi, sütundaki Discontinued verileri sayfadaki CheckBoxDiscontinued denetimindeki değerle karşılaştırarak verileri filtreler.

<asp:LinqDataSource ID="dataSource" runat="server" TableName="Products">
</asp:LinqDataSource>
<asp:QueryExtender TargetControlID="dataSource" runat="server">
   <asp:PropertyExpression>
      <asp:ControlParameter ControlID="CheckBoxDiscontinued" Name="Discontinued" />
   </asp:PropertyExpression>
</asp:QueryExtender>

CustomExpression

Son olarak, QueryExtender denetimiyle kullanılacak özel bir ifade belirtebilirsiniz. Bu seçenek, sayfada özel filtre mantığını tanımlayan bir işlevi çağırmanızı sağlar. Aşağıdaki örnek, QueryExtender denetiminde bildirimli olarak özel bir ifade belirtmeyi gösterir.

<asp:LinqDataSource ID="dataSource" runat="server" TableName="Products"> 
</asp:LinqDataSource> 
<asp:QueryExtender TargetControlID="dataSource" runat="server"> 
  <asp:CustomExpression OnQuerying="FilterProducts" /> 
</asp:QueryExtender>

Aşağıdaki örnekte QueryExtender denetimi tarafından çağrılan özel işlev gösterilmektedir. Bu durumda kod, Where yan tümcesi içeren bir veritabanı sorgusu kullanmak yerine verileri filtrelemek için LINQ sorgusu kullanır.

protected void FilterProducts(object sender, CustomExpressionEventArgs e) 
{ 
    e.Query = from p in e.Query.Cast() 
      where p.UnitPrice >= 10 
      select p; 
}

Bu örnekler , QueryExtender denetiminde aynı anda kullanılan tek bir ifadeyi gösterir. Ancak , QueryExtender denetimine birden çok ifade ekleyebilirsiniz.

Html Kodlanmış Kod İfadeleri

Bazı ASP.NET siteleri (özellikle ASP.NET MVC ile) yanıt metnini yazmak için <%= expression %> söz dizimini (genellikle "code nuggets" olarak adlandırılır) yoğun bir şekilde kullanır. Kod ifadelerini kullandığınızda, metni HTML ile kodlamayı unutmak kolaydır. Metin kullanıcı girişinden geliyorsa, sayfaları bir XSS (Siteler Arası Betik Oluşturma) saldırısına açık bırakabilir.

ASP.NET 4, kod ifadeleri için aşağıdaki yeni söz dizimini tanıtır:

<%: expression %>

Bu söz dizimi, yanıta yazarken varsayılan olarak HTML kodlamasını kullanır. Bu yeni ifade etkili bir şekilde aşağıdakine çevrilir:

<%= HttpUtility.HtmlEncode(expression) %>

Örneğin, <%: Request["UserInput"] %>Request["UserInput"] değeri üzerinde HTML kodlaması gerçekleştirir.

Bu özelliğin amacı, her adımda hangisini kullanacağınıza karar vermek zorunda bırakılmamak için eski söz diziminin tüm örneklerini yeni söz dizimi ile değiştirmeyi mümkün kılmaktır. Ancak, çıktı olarak alınan metnin HTML olması veya zaten kodlanmış olması gibi durumlarda bu durum çift kodlamaya yol açabilir.

Bu gibi durumlarda ASP.NET 4, somut bir uygulama olan HtmlString ile birlikte IHtmlString adlı yeni bir arabirim sunar. Bu türlerin örnekleri, dönüş değerinin HTML olarak görüntülemek için zaten düzgün bir şekilde kodlandığını (veya başka bir şekilde incelendiğini) ve bu nedenle değerin yeniden HTML ile kodlanmaması gerektiğini belirtmenize olanak tanır. Örneğin, aşağıdakiler HTML kodlanmış olmamalıdır (ve değildir):

<%: new HtmlString("<strong>HTML that is not encoded</strong>") %>

ASP.NET MVC 2 yardımcı yöntemleri, bu yeni söz dizimi ile uyumlu hale getirilerek güncelleştirildi, böylece yalnızca ASP.NET 4 çalıştırılırken çift kodlama yapılmaz. Bu yeni söz dizimi, ASP.NET 3.5 SP1 kullanarak bir uygulama çalıştırdığınızda çalışmaz.

Bunun XSS saldırılarına karşı koruma garantisi vermediğini unutmayın. Örneğin, tırnak içinde olmayan öznitelik değerlerini kullanan HTML, hala duyarlı olan kullanıcı girişi içerebilir. ASP.NET denetimlerinin ve ASP.NET MVC yardımcılarının çıkışının her zaman tırnak işaretleri içinde öznitelik değerlerini içerdiğini unutmayın. Bu, önerilen yaklaşımdır.

Benzer şekilde, bu söz dizimi, kullanıcı girişini temel alan bir JavaScript dizesi oluşturduğunuzda olduğu gibi JavaScript kodlaması gerçekleştirmez.

Proje Şablonu Değişiklikleri

ASP.NET önceki sürümlerinde, yeni bir Web Sitesi projesi veya Web Uygulaması projesi oluşturmak için Visual Studio kullandığınızda, sonuçta elde edilen projeler aşağıdaki çizimde gösterildiği gibi yalnızca bir Default.aspx sayfası, varsayılan Web.config dosya ve App_Data klasör içerir:

Visual Studio dosya menüsünün ekran görüntüsü. Varsayılan dosya ve klasörü gösteren örnek yeni proje vurgulanır.

Visual Studio, aşağıdaki şekilde gösterildiği gibi hiç dosya içermeyen Boş Bir Web Sitesi proje türünü de destekler:

Visual Studio dosya menüsünün ekran görüntüsü. Dosya veya klasör içermemek için örnek bir proje dizini gösterilir.

Sonuç, yeni başlayanlar için üretim Web uygulaması oluşturma konusunda çok az rehberlik olmasıdır. Bu nedenle, ASP.NET 4'te biri boş bir Web uygulaması projesi, diğeri de Bir Web Uygulaması ve Web Sitesi projesi için olmak üzere üç yeni şablon kullanıma sunulur.

Boş Web Uygulaması Şablonu

Adından da anlaşılacağı gibi, Boş Web Uygulaması şablonu kaldırılmış bir Web Uygulaması projesidir. Aşağıdaki şekilde gösterildiği gibi Visual Studio Yeni Proje iletişim kutusundan bu proje şablonunu seçersiniz:

Visual Studio Yeni Proje İletişim Kutusu'nun ekran görüntüsü. Boş ASP.NET Web Uygulaması başlıklı giriş vurgulanır.

(Tam boyutlu görüntüyü görüntülemek için tıklayın)

Boş ASP.NET Web Uygulaması oluşturduğunuzda, Visual Studio aşağıdaki klasör düzenini oluşturur:

Visual Studio dosya menüsünü gösteren ekran görüntüsü. Web noktası yapılandırması başlıklı dosya vurgulanır.

Bu, bir özel durum dışında ASP.NET'nin önceki sürümlerindeki Boş Web Sitesi düzenine benzer. Visual Studio 2010'da, Boş Web Uygulaması ve Boş Web Sitesi projeleri, projenin hedeflediği çerçeveyi tanımlamak için Visual Studio tarafından kullanılan bilgileri içeren aşağıdaki en küçük Web.config dosyayı içerir:

! <?xml version =

Bu targetFramework özelliği olmadan Visual Studio, eski uygulamaları açarken uyumluluğu korumak için varsayılan olarak .NET Framework 2.0'ı hedeflemektedir.

Web Uygulaması ve Web Sitesi Proje Şablonları

Visual Studio 2010 ile birlikte gönderilen diğer iki yeni proje şablonu önemli değişiklikler içerir. Aşağıdaki şekilde, yeni bir Web Uygulaması projesi oluşturduğunuzda oluşturulan proje düzeni gösterilmektedir. (Web Sitesi projesinin düzeni neredeyse aynıdır.)

  • Yeni projeyle oluşturulan proje dosyalarını ve klasörlerini gösteren Visual Studio dosya menüsünün ekran görüntüsü.

Proje, önceki sürümlerde oluşturulmamış birkaç dosya içerir. Buna ek olarak, yeni Web Uygulaması projesi, yeni uygulamaya erişimin güvenliğini sağlamaya hızlı bir şekilde başlamanızı sağlayan temel üyelik işlevselliğiyle yapılandırılır. Bu ekleme nedeniyle, Web.config yeni projenin dosyası üyelikleri, rolleri ve profilleri yapılandırmak için kullanılan girdileri içerir. Aşağıdaki örnekte yeni bir Web Uygulaması projesinin Web.config dosyası gösterilmektedir. (Bu durumda roleManager devre dışıdır.)

Web uygulaması projesinden bir yapılandırma dosyası örneği gösteren Visual Studio düzenleme ortamının ekran görüntüsü.

(Tam boyutlu görüntüyü görüntülemek için tıklayın)

Proje ayrıca Web.config adlı dizinde ikinci bir Account dosya içerir. İkinci yapılandırma dosyası, oturum açmamış kullanıcılar için ChangePassword.aspx sayfasına erişimi güvenli hale getirmek için bir yol sağlar. Aşağıdaki örnekte ikinci Web.config dosyanın içeriği gösterilmektedir.

<?xml version=

Yeni proje şablonlarında varsayılan olarak oluşturulan sayfalar da önceki sürümlerden daha fazla içerik içerir. Proje varsayılan bir ana sayfa ve CSS dosyası içerir ve varsayılan sayfa (Default.aspx) varsayılan olarak ana sayfayı kullanacak şekilde yapılandırılır. Sonuç, Web uygulamasını veya Web sitesini ilk kez çalıştırdığınızda varsayılan (giriş) sayfasının zaten işlevsel olmasıdır. Aslında, yeni bir MVC uygulaması başlattığınızda gördüğünüz varsayılan sayfaya benzer.

Yeni bir MVC uygulaması başlattığınızda oluşturulan varsayılan sayfanın tarayıcı görünümünü gösteren ekran görüntüsü.

(Tam boyutlu görüntüyü görüntülemek için tıklayın)

Proje şablonlarında yapılan bu değişikliklerin amacı, yeni bir Web uygulaması oluşturmaya nasıl başlayacağınızı gösteren yönergeler sağlamaktır. Sembolik olarak doğru, katı XHTML 1.0 uyumlu işaretleme ve CSS kullanılarak belirtilen düzende, şablonlardaki sayfalar ASP.NET 4 Web uygulaması oluşturmaya yönelik en iyi yöntemleri temsil eder. Varsayılan sayfaların kolayca özelleştirebileceğiniz iki sütunlu bir düzeni de vardır.

Örneğin, yeni bir Web Uygulaması için bazı renkleri değiştirmek ve ASP.NET Uygulamam logosu yerine şirket logonuzu eklemek istediğinizi düşünün. Bunu yapmak için altında logo resminizi depolamak için yeni bir dizin Content oluşturursunuz:

Logo dosyası içeren images klasörüne sahip bir dosya dizinini gösteren ekran görüntüsü.

Görüntüyü sayfaya eklemek için dosyayı açarSite.Master, ASP.NET Uygulamam metninin tanımlandığı yeri bulur ve aşağıdaki örnekte olduğu gibi src özniteliği yeni logo görüntüsüne ayarlanmış bir görüntü öğesiyle değiştirirsiniz:

<div class=

(Tam boyutlu görüntüyü görüntülemek için tıklayın)

Daha sonra Site.css dosyasına gidebilir ve CSS sınıf tanımlarını değiştirerek sayfanın arka plan rengini ve üst bilginin rengini değiştirebilirsiniz.

Bu değişikliklerin sonucu, çok az çabayla özelleştirilmiş bir giriş sayfası görüntüleyebilmenizdir:

Özelleştirilmiş bir giriş sayfasının tarayıcı görünümünü gösteren ekran görüntüsü.

(Tam boyutlu görüntüyü görüntülemek için tıklayın)

CSS Geliştirmeleri

ASP.NET 4'teki önemli çalışma alanlarından biri, en son HTML standartlarıyla uyumlu HTML'nin işlenmesine yardımcı olmaktır. Bu, ASP.NET Web sunucusu denetimlerinin CSS stillerini kullanma şekline yönelik değişiklikleri içerir.

İşleme için Uyumluluk Ayarı

Varsayılan olarak, bir Web uygulaması veya Web sitesi .NET Framework 4'i hedeflediğinde pages öğesinincontrolRenderingCompatibilityVersion özniteliği "4.0" olarak ayarlanır. Bu öğe makine düzeyindeki Web.config dosyada tanımlanır ve varsayılan olarak tüm ASP.NET 4 uygulama için geçerlidir:

<system.web> 
  <pages controlRenderingCompatibilityVersion="3.5|4.0"/> 
</system.web>

controlRenderingCompatibility değeri, gelecek sürümlerde olası yeni sürüm tanımlarına izin veren bir dizedir. Geçerli sürümde, bu özellik için aşağıdaki değerler desteklenir:

  • "3.5". Bu ayar eski işlemeyi ve işaretlemeyi gösterir. Denetimler tarafından işlenen işaretleme %100 geriye dönük uyumludur ve xhtmlConformance özelliğinin ayarı dikkate alınır.
  • "4.0". Özelliğin bu ayarı varsa, ASP.NET Web sunucusu denetimleri aşağıdakileri yapar:
  • xhtmlConformance özelliği her zaman "Strict" olarak değerlendirilir. Sonuç olarak, denetimler XHTML 1.0 Strict işaretlemesini işler.
  • Giriş dışı denetimlerin devre dışı bırakılması artık geçersiz stiller oluşturmaz.
  • Gizli alanların etrafındaki div öğeleri artık stillendirilir, böylece kullanıcı tarafından oluşturulan CSS kurallarını engellemez.
  • Menü denetimleri, anlamsal olarak doğru ve erişilebilirlik yönergeleriyle uyumlu işaretleme işlerini oluşturur.
  • Doğrulama denetimleri satır içi stilleri görüntülemez.
  • Daha önce border="0" (ASP.NET Tablo denetiminden ve ASP.NET Görüntü denetiminden türetilen denetimler) işleyen denetimler artık bu özniteliği işlemez.

Denetimleri Devre Dışı Bırakma

ASP.NET 3.5 SP1 ve önceki sürümlerinde çerçeve, Enabled özelliği false olarak ayarlanmış tüm denetimler için HTML işaretlemesinde devre dışı özniteliğini işler. Ancak, HTML 4.01 belirtimine göre yalnızca giriş öğelerinin bu özniteliği olmalıdır.

ASP.NET 4'te, aşağıdaki örnekte olduğu gibi controlRenderingCompatibilityVersion özelliğini "3.5" olarak ayarlayabilirsiniz:

<system.web> 
  <pages controlRenderingCompatibilityVersion="3.5"/> 
</system.web>

Aşağıdaki gibi bir Etiket denetimi için işaretleme oluşturabilirsiniz ve bu da denetimi devre dışı bırakır:

<asp:Label id="Label" runat="server" Text="Test" Enabled="false">

Etiket denetimi aşağıdaki HTML'yi işler:

<span id="Label1" disabled="disabled">Test</span>

ASP.NET 4'te controlRenderingCompatibilityVersion değerini "4.0" olarak ayarlayabilirsiniz. Bu durumda, denetimin Enabled özelliği false olarak ayarlandığında yalnızca giriş öğelerini işleyen denetimler devre dışı bırakılmış bir özniteliği işler. BUNUN yerine HTML giriş öğelerini işlemeyen denetimler, denetimin devre dışı bir görünümünü tanımlamak için kullanabileceğiniz bir CSS sınıfına başvuran bir sınıf özniteliğini işler. Örneğin, önceki örnekte gösterilen Etiket denetimi aşağıdaki işaretlemeyi oluşturur:

<span id="Span1" class="aspnetdisabled">Test</span>

Bu denetim için belirtilen sınıfın varsayılan değeri "aspNetDisabled" değeridir. Ancak, WebControl sınıfının static DisabledCssClass statik özelliğini ayarlayarak bu varsayılan değeri değiştirebilirsiniz. Denetim geliştiricileri için, belirli bir denetim için kullanılacak davranış SupportsDisabledAttribute özelliği kullanılarak da tanımlanabilir.

Gizli Alanların Çevresinde Div Öğelerini Gizleme

ASP.NET 2.0 ve üzeri sürümler, XHTML standardına uymak için div öğesinin içinde sisteme özgü gizli alanları (görünüm durumu bilgilerini depolamak için kullanılan gizli öğe gibi) işler. Ancak, bir CSS kuralı sayfadaki div öğelerini etkilediğinde bu sorunlara neden olabilir. Örneğin, gizli div öğelerinin çevresinde sayfada bir piksellik bir çizginin görünmesine neden olabilir. ASP.NET 4'te, ASP.NET tarafından oluşturulan gizli alanları kapsayan div öğeleri, aşağıdaki örnekte görüldüğü gibi bir CSS sınıf başvurusu ekler.

<div class="aspNetHidden">...</div>

Ardından, aşağıdaki örnekte olduğu gibi yalnızca ASP.NET tarafından oluşturulan gizli öğelere uygulanan bir CSS sınıfı tanımlayabilirsiniz:

<style type="text/css"> 
  DIV# aspNetHidden {border:0;} 

</style>

Şablonlu Denetimler için Dış Tablo Oluşturma

Varsayılan olarak, şablonları destekleyen aşağıdaki ASP.NET Web sunucusu denetimleri, satır içi stilleri uygulamak için kullanılan bir dış tabloda otomatik olarak sarmalanır:

  • Formview
  • Oturum açma
  • Passwordrecovery
  • Changepassword
  • Sihirbazı
  • CreateUserWizard

Dış tablonun işaretlemeden kaldırılmasını sağlayan bu denetimlere RenderOuterTable adlı yeni bir özellik eklendi. Örneğin, aşağıdaki FormView denetimi örneğini göz önünde bulundurun:

<asp:FormView ID="FormView1" runat="server"> 
  <ItemTemplate> 
      Content 
  </ItemTemplate> 

</asp:FormView>

Bu işaretleme dili, HTML tablosu içeren aşağıdaki çıktıyı sayfaya oluşturur.

<table cellspacing="0" border="0" id="Table1" style="border-collapse:collapse;"> 
  <tr> 
    <td colspan="2"> 
      Content 
    </td> 
  </tr> 

</table>

Tablonun işlenmesini önlemek için, aşağıdaki örnekte olduğu gibi FormView denetiminin RenderOuterTable özelliğini ayarlayabilirsiniz:

<asp:FormView ID="FormView1" runat="server" RenderOuterTable="false">

Önceki örnekte tablo, tr ve td öğeleri olmadan aşağıdaki çıkış işlenir:

Content

Bu geliştirme, denetim tarafından beklenmeyen etiketler işlenmediğinden CSS ile denetimin içeriğinin stilinin oluşturulmasını kolaylaştırabilir.

Uyarı

Not Bu değişiklik, Visual Studio 2010 tasarımcısında otomatik biçimlendirme işlevi desteğini devre dışı bırakır çünkü artık otomatik biçimlendirme seçeneği tarafından oluşturulan stil özniteliklerini barındırabilen bir tablo öğesi yoktur.

ListView Denetimi Geliştirmeleri

ListView denetiminin ASP.NET 4'te kullanımı kolaylaştırılmıştır. Denetimin önceki sürümü, bilinen bir kimlikle sunucu denetimi içeren bir düzen şablonu belirtmenizi gerektiriyordu. Aşağıdaki işaretlemede, ASP.NET 3.5'te ListView denetiminin nasıl kullanılacağına ilişkin tipik bir örnek gösterilmektedir.

<asp:ListView ID="ListView1" runat="server"> 
  <LayoutTemplate> 
    <asp:PlaceHolder ID="ItemPlaceHolder" runat="server"></asp:PlaceHolder> 
  </LayoutTemplate> 
  <ItemTemplate> 
    <% Eval("LastName")%> 
  </ItemTemplate> 
</asp:ListView>

ASP.NET 4'te ListView denetimi bir düzen şablonu gerektirmez. Önceki örnekte gösterilen işaretleme aşağıdaki işaretlemeyle değiştirilebilir:

<asp:ListView ID="ListView1" runat="server"> 
  <ItemTemplate> 
    <% Eval("LastName")%> 
  </ItemTemplate> 

</asp:ListView>

CheckBoxList ve RadioButtonList Denetim Geliştirmeleri

ASP.NET 3.5'te, aşağıdaki iki ayarı kullanarak CheckBoxList ve RadioButtonList düzenini belirtebilirsiniz:

  • Akış. Denetim, içeriğini içermek üzere span öğeleri oluşturur.
  • Tablo. Denetim, içeriğini barındırmak için bir tablo öğesi oluşturur.

Aşağıdaki örnekte bu denetimlerin her biri için işaretleme gösterilmektedir.

<asp:CheckBoxList ID="CheckBoxList1" runat="server" RepeatLayout="Flow"> 
  <asp:ListItem Text="CheckBoxList" Value="cbl" /> 
</asp:CheckBoxList> 

<asp:RadioButtonList runat="server" RepeatLayout="Table"> 
  <asp:ListItem Text="RadioButtonList" Value="rbl" /> 
</asp:RadioButtonList>

Varsayılan olarak, denetimler HTML'yi aşağıdakine benzer şekilde işler:

<span id="Span2"><input id="CheckBoxList1_0" type="checkbox" 
    name="CheckBoxList1$0" /><label for="CheckBoxList1_0">CheckBoxList</label></span> 
    
<table id="RadioButtonList1" border="0"> 
  <tr> 
    <td><input id="RadioButtonList1_0" type="radio" name="RadioButtonList1" value="rbl" /><label for="RadioButtonList1_0">RadioButtonList</label></td> 
  </tr> 

</table>

Bu denetimler öğe listeleri içerdiğinden, görsel olarak doğru HTML'yi işlemek için içeriklerini HTML listesi (li) öğelerini kullanarak işlemeleri gerekir. Bu, yardımcı teknolojiyi kullanarak Web sayfalarını okuyan kullanıcılar için işleri kolaylaştırır ve CSS kullanarak denetimleri stilize etmeyi kolaylaştırır.

ASP.NET 4'te CheckBoxList ve RadioButtonList denetimleri RepeatLayout özelliği için aşağıdaki yeni değerleri destekler:

  • OrderedList : İçerik ol öğesi içinde li öğeleri olarak işlenir.
  • UnorderedList : İçerik bir ul öğesi içinde li öğeleri olarak işlenir.

Aşağıdaki örnekte bu yeni değerlerin nasıl kullanılacağı gösterilmektedir.

<asp:CheckBoxList ID="CheckBoxList1" runat="server" 
      RepeatLayout="OrderedList">
  <asp:ListItem Text="CheckBoxList" Value="cbl" />
</asp:CheckBoxList>

<asp:RadioButtonList ID="RadioButtonList1" runat="server"  
      RepeatLayout="UnorderedList">
  <asp:ListItem Text="RadioButtonList" Value="rbl" />
</asp:RadioButtonList>

Yukarıdaki işaretleme aşağıdaki HTML'yi oluşturur:

<ol id="CheckBoxList1">

  <li><input id="CheckBoxList1_0" type="checkbox" name="CheckBoxList1$0" value="cbl" /><label for="CheckBoxList1_0">CheckBoxList</label></li>
</ol>
    
<ul id="RadioButtonList1">
  <li><input id="RadioButtonList1_0" type="radio" name="RadioButtonList1" value="rbl" /><label for="RadioButtonList1_0">RadioButtonList</label></li>

</ul>

Uyarı

Not RepeatLayout'uOrderedList veya UnorderedList olarak ayarlarsanız, RepeatDirection özelliği artık kullanılamaz ve özellik işaretlemeniz veya kodunuz içinde ayarlanmışsa çalışma zamanında bir özel durum oluşturur. Bunun yerine bu denetimlerin görsel düzeni CSS kullanılarak tanımlandığından özelliğin değeri olmaz.

ASP.NET 4'e geçmeden önce Menü denetimi bir dizi HTML tablosu işledi. Bu, CSS stillerini satır içi özellikleri ayarlamanın dışında uygulamayı zorlaştırdı ve erişilebilirlik standartlarıyla da uyumlu değildi.

ASP.NET 4'te, denetim artık sıralanmamış bir liste ve liste öğesinden oluşan anlamsal işaretlemeyi kullanarak HTML'yi işler. Aşağıdaki örnekte , Menü denetimi için bir ASP.NET sayfasında işaretleme gösterilmektedir.

<asp:Menu ID="Menu1" runat="server"> 
  <Items> <asp:MenuItem Text="Home" Value="Home" /> 
    <asp:MenuItem Text="About" Value="About" /> 
  </Items> 

</asp:Menu>

Sayfa işlendiğinde, denetim aşağıdaki HTML'yi üretir (açık olması için onclick kodu atlanmıştır):

<div id="Menu1"> 
  <ul> 
    <li><a href="#" onclick="...">Home</a></li> 
    <li><a href="#" onclick="...">About</a></li> 
  </ul> 

</div> 
<script type="text/javascript"> 
  new Sys.WebForms.Menu('Menu1'); 
</script>

İşleme geliştirmelerine ek olarak, odak yönetimi kullanılarak menünün klavye gezintisi geliştirildi. Menü denetimi odağı aldığında, öğelerde gezinmek için ok tuşlarını kullanabilirsiniz. Menü denetimi artık erişilebilir zengin internet uygulamaları (ARIA) rollerini ve özniteliklerini, Menü ARIA yönergelerini takip ederek ekleyip, erişilebilirliği artırıyor.

Menü denetiminin stilleri, işlenen HTML öğeleriyle aynı hizada değil, sayfanın üst kısmındaki bir stil bloğunda işlenir. Denetimin stili üzerinde tam denetim sahibi olmak istiyorsanız, yeni IncludeStyleBlock özelliğini false olarak ayarlayabilirsiniz; bu durumda stil bloğu gösterilmez. Bu özelliği kullanmanın bir yolu, visual studio tasarımcısındaki otomatik biçimlendirme özelliğini kullanarak menünün görünümünü ayarlamaktır. Ardından sayfayı çalıştırabilir, sayfa kaynağını açabilir ve işlenen stil bloğunu bir dış CSS dosyasına kopyalayabilirsiniz. Visual Studio'da stili geri alın ve IncludeStyleBlock değerini false olarak ayarlayın. Sonuç, menü görünümünün dış stil sayfasındaki stiller kullanılarak tanımlanmasıdır.

Sihirbaz ve CreateUserWizard Kontrolleri

ASP.NET Sihirbazı ve CreateUserWizard denetimleri, işledikleri HTML'yi tanımlamanıza olanak sağlayan şablonları destekler. (CreateUserWizard, Sihirbaz'dan türetilir.) Aşağıdaki örnekte, tam şablonlu CreateUserWizard denetiminin işaretlemesi gösterilmektedir:

<asp:CreateUserWizard ID="CreateUserWizard1" runat="server" ActiveStepIndex="0"> 
  <HeaderTemplate> 
  </HeaderTemplate>
 
  <SideBarTemplate> 
  </SideBarTemplate>
 
  <StepNavigationTemplate> 
  </StepNavigationTemplate> 

  <StartNavigationTemplate> 
  </StartNavigationTemplate> 

  <FinishNavigationTemplate> 
  </FinishNavigationTemplate> 

  <WizardSteps> 
    <asp:CreateUserWizardStep ID="CreateUserWizardStep1" runat="server"> 
      <ContentTemplate> 
      </ContentTemplate>

      <CustomNavigationTemplate> 
      </CustomNavigationTemplate>

    </asp:CreateUserWizardStep>
 
    <asp:CompleteWizardStep ID="CompleteWizardStep1" runat="server"> 
      <ContentTemplate> 
      </ContentTemplate> 
    </asp:CompleteWizardStep> 

  </WizardSteps> 

</asp:CreateUserWizard>

Denetim, HTML'yi aşağıdakine benzer şekilde oluşturur:

<table cellspacing="0" cellpadding="0" border="0" id="CreateUserWizard1" style="border-collapse:collapse;"> 
  <tr> 
    <td>Header</td> 
  </tr> 
  <tr style="height:100%;"> 
    <td> 
      <table cellspacing="0" cellpadding="0" border="0" style="height:100%;width:100%;border-collapse:collapse;"> 
        <tr> 
          <td style="height:100%;width:100%;"></td> 
        </tr> 
      </table> 
    </td> 
  </tr> 
  <tr> 
    <td align="right"></td> 
  </tr> 

</table>

ASP.NET 3.5 SP1'de şablon içeriğini değiştirebilirsiniz ancak Sihirbaz denetiminin çıktısı üzerinde hala sınırlı denetime sahip olursunuz. ASP.NET 4'te bir LayoutTemplate şablonu oluşturabilir ve Sihirbaz denetiminin nasıl işlenmesini istediğinizi belirtmek için PlaceHolder denetimleri (ayrılmış adları kullanarak) ekleyebilirsiniz. Aşağıdaki örnekte bu gösterilmektedir:

<asp:CreateUserWizard ID="CreateUserWizard1" runat="server" ActiveStepIndex="1"> 
  <LayoutTemplate> 
    <asp:PlaceHolder ID="headerPlaceholder" runat="server" /> 
    <asp:PlaceHolder ID="sideBarPlaceholder" runat="server" /> 
    <asp:PlaceHolder id="wizardStepPlaceholder" runat="server" /> 
    <asp:PlaceHolder id="navigationPlaceholder" runat="server" /> 
  </LayoutTemplate> 
  <HeaderTemplate> 
    Header 
  </HeaderTemplate> 
  <WizardSteps> 
    <asp:CreateUserWizardStep runat="server"> 
      <ContentTemplate> 
      </ContentTemplate> 
    </asp:CreateUserWizardStep> 
    <asp:CompleteWizardStep runat="server"> 
      <ContentTemplate> 
      </ContentTemplate> 
    </asp:CreateUserWizardStep> 
  </WizardSteps> 

</asp:CreateUserWizard>

Örnek, LayoutTemplate öğesinde aşağıdaki adlandırılmış yer tutucuları içerir:

  • headerPlaceholder – Çalışma zamanında bu, HeaderTemplate öğesinin içeriğiyle değiştirilir.
  • sideBarPlaceholder – Çalışma zamanında bu, SideBarTemplate öğesinin içeriğiyle değiştirilir.
  • wizardStepPlaceHolder – Çalışma zamanında, bu, WizardStepTemplate öğesinin içeriğiyle değiştirilir.
  • navigationPlaceholder – Çalışma zamanında bu, tanımladığınız gezinti şablonlarıyla değiştirilir.

Yer tutucuları kullanan örnekteki işaretleme aşağıdaki HTML'yi işler (şablonlarda gerçekten tanımlanmış içerik olmadan):

<span>
</span>

Şu anda kullanıcı tanımlı olmayan tek HTML bir span öğesidir. (Gelecek sürümlerde span öğesinin bile işlenmeyeceğini tahmin ediyoruz.) Bu, sihirbaz denetimi tarafından oluşturulan neredeyse tüm içerik üzerinde tam denetim sağlar.

ASP.NET MVC

ASP.NET MVC, Mart 2009'da ASP.NET 3.5 SP1'e bir eklenti çerçevesi olarak sunulmuştur. Visual Studio 2010, yeni özellikler ve özellikler içeren ASP.NET MVC 2'yi içerir.

Alanlar Desteği

Alanlar, denetleyicileri ve görünümleri diğer bölümlerden göreli olarak yalıtılarak büyük bir uygulamanın bölümleri halinde gruplandırmanıza olanak sağlar. Her alan, daha sonra ana uygulama tarafından başvurulabilen ayrı bir ASP.NET MVC projesi olarak uygulanabilir. Bu, büyük bir uygulama oluştururken karmaşıklığı yönetmeye yardımcı olur ve birden çok ekibin tek bir uygulamada birlikte çalışmasını kolaylaştırır.

Data-Annotation Öznitelik Doğrulama Desteği

DataAnnotations öznitelikleri, meta veri özniteliklerini kullanarak modele doğrulama mantığı eklemenize olanak tanır. DataAnnotations öznitelikleri , ASP.NET 3.5 SP1'deki ASP.NET Dinamik Veriler'de sunulmuştur. Bu öznitelikler varsayılan model bağlayıcısı ile tümleştirilmiştir ve kullanıcı girişini doğrulamak için meta veri temelli bir araç sağlar.

Şablonlu Yardımcılar

Şablonlu yardımcılar, düzenleme ve görüntüleme şablonlarını veri türleriyle otomatik olarak ilişkilendirmenize olanak sağlar. Örneğin, bir tarih seçici kullanıcı arabirimi öğesinin System.DateTime değeri için otomatik olarak işleneceğini belirtmek için şablon yardımcısını kullanabilirsiniz. Bu, ASP.NET Dinamik Verilerdeki alan şablonlarına benzer.

Html.EditorFor ve Html.DisplayFor yardımcı yöntemleri, standart veri türlerinin yanı sıra birden çok özelliğe sahip karmaşık nesneleri işlemek için yerleşik desteğe sahiptir. Ayrıca ViewModel nesnesine DisplayName ve ScaffoldColumn gibi veri ek açıklaması öznitelikleri uygulamanıza izin vererek işlemeyi özelleştirir.

Genellikle kullanıcı arabirimi yardımcılarından gelen çıkışı daha da özelleştirmek ve oluşturulanlar üzerinde tam denetim sahibi olmak istersiniz. Html.EditorFor ve Html.DisplayFor yardımcı yöntemleri, işlenen çıkışı geçersiz kılıp denetleyebilen dış şablonlar tanımlamanıza olanak tanıyan bir şablon oluşturma mekanizması kullanarak bunu destekler. Şablonlar bir sınıf için ayrı ayrı işlenebilir.

Dinamik Veriler

Dinamik Veriler, 2008 ortasında .NET Framework 3.5 SP1 sürümünde kullanıma sunulmuştur. Bu özellik, aşağıdakiler de dahil olmak üzere veri temelli uygulamalar oluşturmaya yönelik birçok geliştirme sağlar:

  • Hızlı bir şekilde veri odaklı bir Web sitesi oluşturmaya yönelik rad deneyimi.
  • Veri modelinde tanımlanan kısıtlamaları temel alan otomatik doğrulama.
  • Dinamik Veri projenizin parçası olan alan şablonlarını kullanarak GridView ve DetailsView denetimlerindeki alanlar için oluşturulan işaretlemeyi kolayca değiştirme olanağı.

Uyarı

Not Daha fazla bilgi için MSDN Kitaplığı'ndaki Dinamik Veri belgelerine bakın.

ASP.NET 4 için Dinamik Veriler, geliştiricilere veri odaklı Web siteleri oluşturmak için daha da fazla güç verecek şekilde geliştirilmiştir.

Mevcut Projeler için Dinamik Verileri Etkinleştirme

.NET Framework 3.5 SP1'de gönderilen Dinamik Veri özellikleri aşağıdaki gibi yeni özellikler getirdi:

  • Alan şablonları– Bunlar, veriye bağlı denetimler için veri türü tabanlı şablonlar sağlar. Alan şablonları, veri denetimlerinin görünümünü özelleştirmek için her alan için şablon alanlarını kullanmaktan daha kolay bir yol sağlar.
  • Doğrulama – Dinamik Veri, gerekli alanlar, aralık denetimi, tür denetimi, normal ifadeleri kullanarak desen eşleştirme ve özel doğrulama gibi yaygın senaryolar için doğrulamayı belirtmek için veri sınıflarındaki öznitelikleri kullanmanıza olanak tanır. Doğrulama, veri denetimleri tarafından uygulanır.

Ancak, bu özellikler aşağıdaki gereksinimlere sahipti:

  • Veri erişim katmanının Entity Framework'e veya LINQ to SQL'e dayalı olması gerekiyordu.
  • Bu özellikler için desteklenen tek veri kaynağı denetimleri EntityDataSource veya LinqDataSource denetimleridir.
  • Özellikler, özelliği desteklemek için gerekli olan tüm dosyalara sahip olmak için Dinamik Veri veya Dinamik Veri Varlıkları şablonları kullanılarak oluşturulmuş bir Web projesi gerektiriyordu.

ASP.NET 4'te Dinamik Veri desteğinin önemli bir hedefi, herhangi bir ASP.NET uygulama için Dinamik Veri'nin yeni işlevselliğini etkinleştirmektir. Aşağıdaki örnekte, mevcut bir sayfadaki Dinamik Veri işlevselliğinden yararlanabilen denetimler için işaretleme gösterilmektedir.

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="True" 
    DataKeyNames="ProductID" DataSourceID="LinqDataSource1"> 
</asp:GridView> 
<asp:LinqDataSource ID="LinqDataSource1" runat="server" 
    ContextTypeName="DataClassesDataContext" EnableDelete="True" EnableInsert="True" 
    EnableUpdate="True" TableName="Products"> 

</asp:LinqDataSource>

Sayfanın kodunda, bu denetimler için Dinamik Veri desteğini etkinleştirmek için aşağıdaki kodun eklenmesi gerekir:

GridView1.EnableDynamicData(typeof(Product));

GridView denetimi düzenleme modundayken, Dinamik Veriler girilen verilerin uygun biçimde olduğunu otomatik olarak doğrular. Değilse, bir hata iletisi görüntülenir.

Bu işlevsellik, ekleme modu için varsayılan değerleri belirtebilmek gibi başka avantajlar da sağlar. Dinamik Veri olmadan, bir alan için varsayılan bir değer uygulamak için bir olaya eklemeniz, denetimi bulmanız ( FindControl kullanarak) ve değerini ayarlamanız gerekir. ASP.NET 4'te EnableDynamicData çağrısı, bu örnekte gösterildiği gibi nesnedeki herhangi bir alan için varsayılan değerleri geçirmenize olanak tanıyan ikinci bir parametreyi destekler:

DetailsView1.EnableDynamicData(typeof(Product), new { ProductName = "DefaultName" });

Bildirim temelli DynamicDataManager Kontrol Söz Dizimi

DynamicDataManager denetimi, ASP.NET'daki çoğu denetimde olduğu gibi bildirim temelli olarak yapılandırabilmeniz için geliştirilmiştir. DynamicDataManager denetiminin işaretlemesi aşağıdaki örneğe benzer:

<asp:DynamicDataManager ID="DynamicDataManager1" runat="server" 
    AutoLoadForeignKeys="true"> 
  <DataControls> 
    <asp:DataControlReference ControlID="GridView1" /> 
  </DataControls> 

</asp:DynamicDataManager> 
<asp:GridView id="GridView1" runat="server" 
</asp:GridView>

Bu işaretleme, DynamicDataManager denetiminin DataControls bölümünde başvuruda bulunan GridView1 denetimi için Dinamik Veri davranışını etkinleştirir.

Varlık Şablonları

Varlık şablonları, özel bir sayfa oluşturmanıza gerek kalmadan veri düzenini özelleştirmek için yeni bir yol sunar. Sayfa şablonları, Varlık şablonlarını işlemek için FormView denetimini (Önceki Dinamik Veri sürümlerindeki sayfa şablonlarında kullanılan DetailsView denetimi yerine) ve DynamicEntity denetimini kullanır. Bu, Dinamik Veriler tarafından işlenen işaretleme üzerinde daha fazla denetim sağlar.

Aşağıdaki listede varlık şablonları içeren yeni proje dizini düzeni gösterilmektedir:

\DynamicData\EntityTemplates
\DynamicData\EntityTemplates\Default.ascx
\DynamicData\EntityTemplates\Default_Edit.ascx
\DynamicData\EntityTemplates\Default_Insert.ascx

Dizin, EntityTemplate veri modeli nesnelerini görüntülemeye yönelik şablonlar içerir. Varsayılan olarak, nesneler şablon kullanılarak Default.ascx işlenir ve bu şablon, ASP.NET 3.5 SP1'de Dinamik Veriler tarafından kullanılan DetailsView denetimi tarafından oluşturulan işaretlemeye benzer bir işaretleme sağlar. Aşağıdaki örnek, Default.ascx kontrolü için kod düzenini gösterir.

<asp:EntityTemplate runat="server" ID="TemplateContainer1"> 
  <ItemTemplate> 
    <tr 
      <td> 
        <asp:Label ID="Label1" runat="server" OnInit="Label_Init" /> 
      </td> 
      <td> 
        <asp:DynamicControl runat="server" OnInit="DynamicControl_Init" /> 
      </td> 
    </tr> 
  </ItemTemplate> 

</asp:EntityTemplate>

Varsayılan şablonlar, sitenin tamamının görünümünü değiştirmek için düzenlenebilir. Görüntüleme, düzenleme ve ekleme işlemleri için şablonlar vardır. Yalnızca bir nesne türünün görünümünü değiştirmek için veri nesnesinin adı temel alınarak yeni şablonlar eklenebilir. Örneğin, aşağıdaki şablonu ekleyebilirsiniz:

\DynamicData\EntityTemplates\Products.aspx

Şablon aşağıdaki işaretlemeyi içerebilir:

<tr> 
  <td>Name</td> 
  <td><asp:DynamicControl runat="server" DataField="ProductName" /></td> 
  <td>Category</td> 
  <td><asp:DynamicControl runat="server" DataField="Category" /></td> 

</tr>

Yeni varlık şablonları, yeni DynamicEntity denetimi kullanılarak bir sayfada görüntülenir. Çalışma zamanında, bu denetim varlık şablonunun içeriğiyle değiştirilir. Aşağıdaki işaretleme, varlık şablonunu kullanan sayfa şablonunda Detail.aspx denetimini gösterir. Markup'taki DynamicEntity öğesine dikkat edin.

<asp:FormView runat="server" ID="FormView1" 
    DataSourceID="DetailsDataSource" 
    OnItemDeleted="FormView1_ItemDeleted"> 
  <ItemTemplate> 
    <table class="DDDetailsTable" cellpadding="6"> 
      <asp:DynamicEntity runat="server" /> 
      <tr class="td"> 
        <td colspan="2"> 
          <asp:DynamicHyperLink ID="EditHyperLink" runat="server" 
              Action="Edit" Text="Edit" /> 
          <asp:LinkButton ID="DeleteLinkButton" runat="server" 
              CommandName="Delete" 
              CausesValidation="false" 
              OnClientClick='return confirm("Are you sure you want to delete this item?");' 
              Text="Delete" /> 
        </td> 
      </tr> 
    </table> 
  </ItemTemplate> 

</asp:FormView>

URL'ler ve E-posta Adresleri için Yeni Alan Şablonları

ASP.NET 4, iki yeni yerleşik alan şablonu EmailAddress.ascx ve Url.ascxtanıtıyor. Bu şablonlar, EmailAddress veya DataType özniteliğine sahip Url olarak işaretlenmiş alanlar için kullanılır. EmailAddress nesneleri için, alan mailto: protokolü kullanılarak oluşturulan bir köprü olarak görüntülenir. Kullanıcılar bağlantıya tıkladığında kullanıcının e-posta istemcisini açar ve bir iskelet ileti oluşturur. Url olarak yazılan nesneler normal köprüler olarak görüntülenir.

Aşağıdaki örnekte alanların nasıl işaretleneceği gösterilmektedir.

[DataType(DataType.EmailAddress)] 
public object HomeEmail { get; set; } 

[DataType(DataType.Url)] 
public object Website { get; set; }

Dinamik Veri, son kullanıcıların Web sitesine erişirken gördüğü URL'leri denetlemek için .NET Framework 3.5 SP1'e eklenen yeni yönlendirme özelliğini kullanır. Yeni DynamicHyperLink denetimi, Dinamik Veri sitesindeki sayfalara bağlantı oluşturmayı kolaylaştırır. Aşağıdaki örnekte DynamicHyperLink denetiminin nasıl kullanılacağı gösterilmektedir:

<asp:DynamicHyperLink ID="ListHyperLink" runat="server" 
    Action="List" TableName="Products"> 
    Show all products 
</asp:DynamicHyperLink>

Bu işaretleme, Products dosyasında tanımlanan yollara göre Global.asax tablosunun Liste sayfasına işaret eden bir bağlantı oluşturur. Denetim, Dinamik Veri sayfasının temel alındığı varsayılan tablo adını otomatik olarak kullanır.

Veri Modelinde Devralma Desteği

Hem Entity Framework hem de LINQ to SQL, veri modellerinde devralmayı destekler. Bunun bir örneği, tablosu olan bir InsurancePolicy veritabanı olabilir. Ayrıca, InsurancePolicy ile aynı alanlara sahip olan ve ardından daha fazla alan ekleyen CarPolicy ve HousePolicy tablolarını da içerebilir. Dinamik Veriler, veri modelindeki devralınan nesneleri anlamak ve devralınan tablolar için yapı iskelesini desteklemek üzere değiştirildi.

Çoka Çok İlişkiler desteği (Yalnızca Varlık Çerçevesi)

Entity Framework, tablolar arasındaki çoka çok ilişkiler için zengin destek sağlamaktadır ve bu, ilişkilerin bir Entity nesnesinde koleksiyon olarak sunulmasıyla uygulanmaktadır. Çoka çok ilişkilerde yer alan verileri görüntüleme ve düzenleme desteği sağlamak için yeni ManyToMany.ascx ve ManyToMany_Edit.ascx alan şablonları eklenmiştir.

Görüntüleme ve Destek Numaralandırmalarını Denetlemek için Yeni Öznitelikler

DisplayAttribute, alanların görüntülenme şekli üzerinde ek denetim sağlamak için eklenmiştir. Önceki Dinamik Veri sürümlerindeki DisplayName özniteliği, bir alan için resim yazısı olarak kullanılan adı değiştirmenize izin verdi. Yeni DisplayAttribute sınıfı, bir alanın görüntülenme sırası ve bir alanın filtre olarak kullanılıp kullanılmayacağı gibi daha fazla alan görüntüleme seçeneği belirtmenize olanak tanır. Özniteliği ayrıca GridView denetimindeki etiketler için kullanılan ad, DetailsView denetiminde kullanılan ad, alanın yardım metni ve alan için kullanılan filigran (alan metin girişini kabul ederse) için bağımsız denetim sağlar.

Alanları numaralandırmalarla eşlemenize olanak sağlamak için EnumDataTypeAttribute sınıfı eklendi. Bu özniteliği bir alana uyguladığınızda, bir numaralandırma türü belirtirsiniz. Dinamik Veri, numaralandırma değerlerini görüntülemek ve düzenlemek için kullanıcı arabirimi oluşturmak için yeni Enumeration.ascx alan şablonunu kullanır. Şablon, veritabanındaki değerleri numaralandırmadaki adlarla eşler.

Filtreler için Gelişmiş Destek

Dinamik Veri 1.0, Boole sütunları ve yabancı anahtar sütunları için yerleşik filtrelerle birlikte gönderilir. Filtreler, bunların görüntülenip görüntülenmeyeceğini veya hangi sırada görüntülendiğini belirtmenize izin vermedi. Yeni DisplayAttribute özniteliği, bir sütunun filtre olarak görüntülenip görüntülenmeyeceğini ve hangi sırada görüntüleneceğini denetleyerek bu sorunların her ikisini de giderir.

Web Forms'un yeni özelliğini kullanmak için filtreleme desteğinin yeniden yazılması ek bir geliştirmedir. Bu, filtrelerin birlikte kullanılacağı veri kaynağı denetimi hakkında bilgi sahibi olmanıza gerek kalmadan filtreler oluşturmanıza olanak tanır. Bu uzantılarla birlikte filtreler, yenilerini eklemenize olanak tanıyan şablon denetimlerine de dönüştürülmüştür. Son olarak, daha önce bahsedilen DisplayAttribute sınıfı, UIHint'in bir sütun için varsayılan alan şablonunun geçersiz kılınmasına izin verdiği şekilde varsayılan filtrenin geçersiz kılınmasına izin verir.

Visual Studio 2010 Web Geliştirme İyileştirmeleri

Visual Studio 2010'da web geliştirme, DAHA fazla CSS uyumluluğu, HTML ve ASP.NET işaretleme parçacıkları ve yeni dinamik IntelliSense JavaScript aracılığıyla daha fazla üretkenlik için geliştirilmiştir.

Geliştirilmiş CSS Uyumluluğu

Visual Studio 2010'daki Visual Web Geliştirici tasarımcısı, CSS 2.1 standartları uyumluluğunu geliştirecek şekilde güncelleştirildi. Tasarımcı, HTML kaynağının bütünlüğünü daha iyi korur ve Visual Studio'nun önceki sürümlerine göre daha sağlamdır. Ayrıca işleme, düzen ve hizmet verilebilirlik konusunda gelecekteki iyileştirmeleri daha iyi sağlayacak mimari iyileştirmeler yapılmıştır.

HTML ve JavaScript Kod Parçacıkları

HTML düzenleyicisinde IntelliSense etiket adlarını otomatik olarak tamamlar. IntelliSense Kod Parçacıkları özelliği etiketlerin tamamını ve daha fazlasını otomatik olarak tamamlar. Visual Studio 2010'da IntelliSense kod parçacıkları, Visual Studio'nun önceki sürümlerinde desteklenen C# ve Visual Basic ile birlikte JavaScript için desteklenir.

Visual Studio 2010, gerekli öznitelikler (runat="sunucu gibi) ve bir etikete özgü ortak öznitelikler ( ID, DataSourceID, ControlToValidate ve Text gibi) dahil olmak üzere ortak ASP.NET ve HTML etiketlerini otomatik tamamlamanıza yardımcı olan 200'den fazla kod parçacığı içerir.

Ek kod parçacıkları indirebilir veya sizin veya ekibinizin ortak görevler için kullandığı işaretleme bloklarını kapsülleyen kendi kod parçacıklarınızı yazabilirsiniz.

JavaScript IntelliSense Geliştirmeleri

Visual 2010'da JavaScript IntelliSense, daha da zengin bir düzenleme deneyimi sağlamak için yeniden tasarlanmıştır. IntelliSense artık registerNamespace gibi yöntemler ve diğer JavaScript çerçeveleri tarafından kullanılan benzer tekniklerle dinamik olarak oluşturulmuş nesneleri tanır. Performans, büyük betik kitaplıklarını analiz etmek ve IntelliSense'i çok az işlem gecikmesiyle veya hiç gecikme olmadan görüntülemek için geliştirilmiştir. Neredeyse tüm üçüncü taraf kitaplıklarını desteklemek ve çeşitli kodlama stillerini desteklemek için uyumluluk önemli ölçüde artırıldı. Artık belgelerinizdeki açıklamalar, yazarken ayrıştırılır ve IntelliSense tarafından anında kullanılır.

Visual Studio 2010 ile Web Uygulaması Dağıtımı

ASP.NET geliştiriciler bir Web uygulaması dağıttığında genellikle aşağıdakiler gibi sorunlarla karşılaştıklarını fark ederler:

  • Paylaşılan bir barındırma sitesine dağıtmak için FTP gibi yavaş olabilecek teknolojiler gerekir. Ayrıca, veritabanını yapılandırmak için SQL betiklerini çalıştırma gibi görevleri el ile gerçekleştirmeniz ve bir sanal dizin klasörünü uygulama olarak yapılandırma gibi IIS ayarlarını değiştirmeniz gerekir.
  • Kurumsal bir ortamda, Web uygulaması dosyalarını dağıtmaya ek olarak, yöneticilerin ASP.NET yapılandırma dosyalarını ve IIS ayarlarını sık sık değiştirmesi gerekir. Uygulama veritabanını çalıştırmak için veritabanı yöneticilerinin bir dizi SQL betiği çalıştırması gerekir. Bu tür yüklemeler yoğun iş gücü kullanır, genellikle tamamlanması saatler sürer ve dikkatli bir şekilde belgelenmelidir.

Visual Studio 2010, bu sorunları gideren ve Web uygulamalarını sorunsuz bir şekilde dağıtmanıza olanak sağlayan teknolojiler içerir. Bu teknolojilerden biri IIS Web Dağıtım Aracıdır (MsDeploy.exe).

Visual Studio 2010'daki web dağıtımı özellikleri aşağıdaki ana alanları içerir:

  • Web paketleme
  • Web.config dönüştürme
  • Veritabanı dağıtımı
  • Web uygulamaları için tek tıklamayla yayımlama

Aşağıdaki bölümlerde bu özelliklerle ilgili ayrıntılar sağlanır.

Web Paketleme

Visual Studio 2010, uygulamanız için Web paketi olarak adlandırılan sıkıştırılmış (.zip) bir dosya oluşturmak için MSDeploy aracını kullanır. Paket dosyası, uygulamanızla ilgili meta verilerin yanı sıra aşağıdaki içeriği içerir:

  • Uygulama havuzu ayarlarını, hata sayfası ayarlarını vb. içeren IIS ayarları.
  • Web sayfalarını, kullanıcı denetimlerini, statik içeriği (görüntüler ve HTML dosyaları) vb. içeren gerçek Web içeriği.
  • SQL Server veritabanı şemaları ve verileri.
  • Güvenlik sertifikaları, GAC'ye yüklenecek bileşenler, kayıt defteri ayarları vb.

Web paketi herhangi bir sunucuya kopyalanabilir ve ardından IIS Yöneticisi kullanılarak el ile yüklenebilir. Alternatif olarak, otomatik dağıtım için paket komut satırı komutları veya dağıtım API'leri kullanılarak yüklenebilir.

Visual Studio 2010, Web paketleri oluşturmak için yerleşik MSBuild görevleri ve hedefleri sağlar. Daha fazla bilgi için MSDN Web sitesinde ASP.NET Web Uygulama Projesi Dağıtımına Genel Bakış ve Vishal Joshi'nin blogunda Web Paketi oluşturmanız için 10 + 20 neden bölümüne bakın.

Web.config Dönüşümü

Web uygulaması dağıtımı için Visual Studio 2010, bir dosyayı geliştirme ayarlarından üretim ayarlarına dönüştürmenize olanak tanıyan Web.config sahiptir. Dönüştürme ayarları, , web.debug.configve benzeri adlı web.release.configdönüştürme dosyalarında belirtilir. (Bu dosyaların adları MSBuild yapılandırmalarıyla eşleşmektedir.) Dönüştürme dosyası yalnızca dağıtılan Web.config bir dosyada yapmanız gereken değişiklikleri içerir. Değişiklikleri basit söz dizimini kullanarak belirtirsiniz.

Aşağıdaki örnekte, yayın yapılandırmanızın dağıtımı için oluşturulabilecek dosyanın bir web.release.config bölümü gösterilmektedir. Örnekteki Replace anahtar sözcüğü, dağıtım sırasında dosyadaki connectionString düğümünü Web.config örnekte listelenen değerlerle değiştirileceğini belirtir.

<connectionStrings xdt:Transform="Replace"> 
  <add name="BlogDB" connectionString="connection string detail]" /> 

</connectionStrings>

Daha fazla bilgi için MSDN web sitesinde Web Application Project Deployment için Web.config Dönüştürme Söz Dizimi ve Vishal Joshi'nin blogunda Web Deployment: Web.Config Dönüşümü hakkında bilgi alabilirsiniz.

Veritabanı Dağıtımı

Visual Studio 2010 dağıtım paketi, SQL Server veritabanlarındaki bağımlılıkları içerebilir. Paket tanımının bir parçası olarak, kaynak veritabanınız için bağlantı dizesini sağlarsınız. Web paketini oluşturduğunuzda, Visual Studio 2010 veritabanı şeması ve isteğe bağlı olarak veriler için SQL betikleri oluşturur ve bunları pakete ekler. Ayrıca özel SQL betikleri sağlayabilir ve sunucuda çalıştırılacakları sırayı belirtebilirsiniz. Dağıtım zamanında, hedef sunucuya uygun bir bağlantı dizesi sağlarsınız; dağıtım işlemi daha sonra bu bağlantı dizesini kullanarak veritabanı şemasını oluşturan betikleri çalıştırır ve verileri ekler.

Ayrıca, tek tıklamayla yayımla'yı kullanarak, uygulama uzak bir paylaşılan barındırma sitesinde yayımlandığında veritabanınızı doğrudan yayımlayacak şekilde dağıtımı yapılandırabilirsiniz. Daha fazla bilgi için MSDN Web sitesi üzerinde yer alan How to: Deploy a Database With a Web Application Project ve Vishal Joshi'nin blogunda yer alan Database Deployment with VS 2010 başlıklarına bakın.

Web Uygulamaları için One-Click Yayımlama

Visual Studio 2010, bir Web uygulamasını uzak sunucuya yayımlamak için IIS uzaktan yönetim hizmetini kullanmanıza da olanak tanır. Barındırma hesabınız için veya sunucuları veya hazırlama sunucularını test etme amacıyla bir yayımlama profili oluşturabilirsiniz. Her profil uygun kimlik bilgilerini güvenli bir şekilde kaydedebilir. Ardından Web tek tıklamayla yayımlama araç çubuğunu kullanarak hedef sunuculardan herhangi birine tek tıklamayla dağıtabilirsiniz. Visual Studio 2010 ile, MSBuild komut satırını kullanarak da yayımlayabilirsiniz. Bu, ekip derleme ortamınızı, sürekli entegrasyon modeline yayımlamayı içerecek şekilde yapılandırmanıza olanak tanır.

Daha fazla bilgi için MSDN Web sitesinde Tek Tıkla Yayımlama ve Web Dağıtımı Kullanarak Bir Web Uygulama Projesi Nasıl Dağıtılır ve Vishal Joshi'nin blogunda VS 2010 ile Web 1-Tıklamayla Yayımlama başlıklarına bakın. Visual Studio 2010'da Web uygulaması dağıtımı hakkındaki video sunularını görüntülemek için Vishal Joshi'nin blogunda Web Geliştirici Önizlemeleri için VS 2010'a bakın.

Kaynaklar

Aşağıdaki Web siteleri ASP.NET 4 ve Visual Studio 2010 hakkında ek bilgi sağlar.

Bildirim

Bu bir ön belgedir ve burada açıklanan yazılımın son ticari sürümünden önce önemli ölçüde değiştirilebilir.

Bu belgede yer alan bilgiler, Microsoft Corporation'ın yayın tarihi itibariyle tartışılan sorunlarla ilgili geçerli görünümünü temsil eder. Microsoft'un değişen pazar koşullarına yanıt vermesi gerektiğinden, bu durum Microsoft'un bir taahhüdü olarak yorumlanmamalıdır ve Microsoft yayın tarihinden sonra sunulan bilgilerin doğruluğunu garanti edemez.

Bu Beyaz Kitap yalnızca bilgilendirme amaçlıdır. MICROSOFT, BU BELGEDEKI BILGILERLE ILGILI OLARAK AÇıK, ZıMNI VEYA YASAL HIÇBIR GARANTI VERMEZ.

Geçerli tüm telif hakkı yasalarına uymak kullanıcının sorumluluğundadır. Telif hakkı kapsamındaki haklar sınırlandırılmadan, bu belgenin hiçbir bölümü, Microsoft Corporation'ın açık yazılı izni olmadan herhangi bir biçimde veya herhangi bir yolla (elektronik, mekanik, fotokopi, kayıt veya başka bir yolla) çoğaltılamaz, depolanamaz veya bu sisteme eklenemez.

Microsoft bu belgedeki konuyu kapsayan patentlere, patent uygulamalarına, ticari markalara, telif haklarına veya diğer fikri mülkiyet haklarına sahip olabilir. Microsoft'un herhangi bir yazılı lisans sözleşmesinde açıkça belirtilmedikçe, bu belgenin sağlanması size bu patentler, ticari markalar, telif hakları veya diğer fikri mülkiyetler için herhangi bir lisans vermez.

Aksi belirtilmediği sürece, burada gösterilen örnek şirketler, kuruluşlar, ürünler, etki alanı adları, e-posta adresleri, logolar, kişiler, yerler ve etkinlikler kurgusaldır ve hiçbir gerçek şirket, kuruluş, ürün, etki alanı adı, e-posta adresi, logo, kişi, yer veya olayla ilişkili değildir veya çıkarılmalıdır.

© 2009 Microsoft Corporation. Tüm hakları saklıdır.

Microsoft ve Windows, Microsoft Corporation'ın ABD'deki ve/veya diğer ülkelerdeki tescilli ticari markaları veya ticari markalarıdır.

Burada bahsedilen gerçek şirketlerin ve ürünlerin adları, ilgili sahiplerinin ticari markaları olabilir.