Birden Çok ContentPlaceHolder ve Varsayılan İçerik (C#)Multiple ContentPlaceHolders and Default Content (C#)

Scott Mitchell tarafındanby Scott Mitchell

Kodu indirin veya PDF 'yi indirinDownload Code or Download PDF

Birden çok içerik alanı sahiplerini bir ana sayfaya nasıl ekleneceğini ve içerik yer tutucuları içinde varsayılan içeriğin nasıl belirtilme konusunda inceler.Examines how to add multiple content place holders to a master page as well as how to specify default content in the content place holders.

GirişIntroduction

Önceki öğreticide, ana sayfaların ASP.NET geliştiricilerin tutarlı bir site genelinde düzen oluşturmasını nasıl sağladığımızda anlatılmıştır.In the preceding tutorial we examined how master pages enable ASP.NET developers to create a consistent site-wide layout. Ana sayfalar, sayfa temelinde özelleştirilebilen tüm içerik sayfaları ve bölgeleri için ortak olan her iki biçimlendirmeyi tanımlar.Master pages define both markup that is common to all of its content pages and regions that are customizable on a page-by-page basis. Önceki öğreticide basit bir ana sayfa (Site.master) ve iki içerik sayfası (Default.aspx ve About.aspx) oluşturduk.In the previous tutorial we created a simple master page (Site.master) and two content pages (Default.aspx and About.aspx). Ana sayfamız, sırasıyla <head> öğesinde ve Web formunda bulunan head ve MainContentadlı iki Contentbir yer tutucudan oluşur.Our master page consisted of two ContentPlaceHolders named head and MainContent, which were located in the <head> element and Web Form, respectively. Her birinin içerik sayfalarında iki Içerik denetimi olsa da, yalnızca MainContentkarşılık gelen biçimlendirme belirtiyoruz.While the content pages each had two Content controls, we only specified markup for the one corresponding to MainContent.

Site.master, bir ana sayfa birden fazla Içerik yer tutucusu içerebilir.As evidenced by the two ContentPlaceHolder controls in Site.master, a master page may contain multiple ContentPlaceHolders. Daha fazlası, ana sayfa ContentPlaceHolder denetimleri için varsayılan biçimlendirmeyi belirtebilir.What's more, the master page may specify default markup for the ContentPlaceHolder controls. Daha sonra bir içerik sayfası, isteğe bağlı olarak kendi işaretlemesini belirtebilir veya varsayılan biçimlendirmeyi kullanabilir.A content page, then, can optionally specify its own markup or use the default markup. Bu öğreticide, ana sayfada birden çok içerik denetimi kullanmayı ve ContentPlaceHolder denetimlerinde nasıl varsayılan biçimlendirme tanımlanacağını görmeyi inceleyeceğiz.In this tutorial we look at using multiple content controls in the master page and see how to define default markup in the ContentPlaceHolder controls.

1. Adım: Ana sayfaya ek ContentPlaceHolder denetimleri eklemeStep 1: Adding Additional ContentPlaceHolder Controls to the Master Page

Birçok Web sitesi tasarımı, ekranda sayfa temelinde özelleştirilmiş birkaç alan içerir.Many website designs contain several areas on the screen that are customized on a page-by-page basis. Site.master, önceki öğreticide oluşturduğumuz ana sayfa, MainContentadlı Web formu içinde tek bir ContentPlaceHolder içerir.Site.master, the master page we created in the preceding tutorial, contains a single ContentPlaceHolder within the Web Form named MainContent. Özellikle, bu ContentPlaceHolder mainContent <div> öğesi içinde bulunur.Specifically, this ContentPlaceHolder is located within the mainContent <div> element.

Şekil 1 ' de bir tarayıcıdan görüntülendiklerinde Default.aspx gösterilmektedir.Figure 1 shows Default.aspx when viewed through a browser. Daire içinde kırmızı olan bölge, MainContentkarşılık gelen sayfaya özgü işaretlemedir.The region circled in red is the page-specific markup corresponding to MainContent.

Daire Içinde bulunan bölge sayfa temelinde şu anda özelleştirilebilen alanı gösterirThe Circled Region Shows the Area Currently Customizable on a Page-by-Page Basis

Şekil 01: Daire Içinde olan bölge, şu anda sayfa sayfa temelinde özelleştirilebilir alanı gösterir (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 01: The Circled Region Shows the Area Currently Customizable on a Page-by-Page Basis (Click to view full-size image)

Şekil 1 ' de gösterilen bölgeye ek olarak, derslerin ve haber bölümlerinin altındaki sol sütuna sayfaya özgü öğeler de eklememiz gerektiğini düşünelim.Imagine that in addition to the region shown in Figure 1, we also need to add page-specific items to the left column beneath the Lessons and News sections. Bunu gerçekleştirmek için ana sayfaya başka bir ContentPlaceHolder denetimi ekleyeceğiz.To accomplish this, we add another ContentPlaceHolder control to the master page. Bunun yanı sıra, Visual Web Developer 'da Site.master ana sayfasını açın ve ardından bir ContentPlaceHolder denetimini, Haberler bölümünün ardından araç kutusundan Tasarımcı üzerine sürükleyin.To follow along, open the Site.master master page in Visual Web Developer and then drag a ContentPlaceHolder control from the Toolbox onto the designer after the News section. ContentPlaceHolder 'ın ID LeftColumnContentolarak ayarlayın.Set the ContentPlaceHolder's ID to LeftColumnContent.

Ana sayfanın sol sütununa bir ContentPlaceHolder denetimi eklemek Add a ContentPlaceHolder Control to the Master Page's Left Column

Şekil 02: ana sayfanın sol sütununa bir ContentPlaceHolder denetimi ekleyin (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 02: Add a ContentPlaceHolder Control to the Master Page's Left Column (Click to view full-size image)

Ana sayfaya ContentPlaceHolder LeftColumnContent eklendiğinde, ContentPlaceHolderID LeftColumnContentolarak ayarlanan sayfada bir Içerik denetimi ekleyerek sayfa temelinde bu bölge için içerik tanımlayabiliriz.With the addition of the LeftColumnContent ContentPlaceHolder to the master page, we can define content for this region on a page-by-page basis by including a Content control in the page whose ContentPlaceHolderID is set to LeftColumnContent. Bu işlemi adım 2 ' de inceleyeceğiz.We examine this process in Step 2.

2. Adım: Içerik sayfalarında yeni ContentPlaceHolder için Içerik tanımlamaStep 2: Defining Content for the New ContentPlaceHolder in the Content Pages

Web sitesine yeni bir içerik sayfası eklerken, Visual Web Developer seçili ana sayfadaki her bir ContentPlaceHolder için sayfada otomatik olarak bir Içerik denetimi oluşturur.When adding a new content page to the website, Visual Web Developer automatically creates a Content control in the page for each ContentPlaceHolder in the selected master page. Adım 1 ' de ana sayfamızda bir LeftColumnContent eklenmiş olan yeni ASP.NET sayfalarında artık üç Içerik denetimi olacaktır.Having added a the LeftColumnContent ContentPlaceHolder to our master page in Step 1, new ASP.NET pages will now have three Content controls.

Bunu göstermek için, Site.master ana sayfasına bağlanan MultipleContentPlaceHolders.aspx adlı kök dizine yeni bir içerik sayfası ekleyin.To illustrate this, add a new content page to the root directory named MultipleContentPlaceHolders.aspx that is bound to the Site.master master page. Visual Web Developer bu sayfayı aşağıdaki bildirim temelli işaretlerle oluşturur:Visual Web Developer creates this page with the following declarative markup:

<%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="MultipleContentPlaceHolders.aspx.cs" Inherits="MultipleContentPlaceHolders" Title="Untitled Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" Runat="Server">
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="LeftColumnContent" Runat="Server">
</asp:Content>

Içerik denetimine MainContent Contentyertutucuları (Content2) başvuran içerik girin.Enter some content into the Content control referencing the MainContent ContentPlaceHolders (Content2). Sonra, Content3 Içerik denetimine aşağıdaki biçimlendirmeyi ekleyin (LeftColumnContent ContentPlaceHolder öğesine başvurur):Next, add the following markup to the Content3 Content control (which references the LeftColumnContent ContentPlaceHolder):

<h3>Page-Specific Content</h3>
<ul>
 <li>This content is defined in the content page.</li>
 <li>The master page has two regions in the Web Form that are editable on a
 page-by-page basis.</li>
</ul>

Bu biçimlendirmeyi ekledikten sonra bir tarayıcı aracılığıyla sayfayı ziyaret edin.After adding this markup, visit the page through a browser. Şekil 3 ' te gösterildiği gibi, Content3 Içerik denetimine yerleştirilmiş olan biçimlendirme, Haberler bölümünün altındaki sol sütunda görüntülenir (kırmızı renkte daire içinde).As Figure 3 shows, the markup placed in the Content3 Content control is displayed in the left column beneath the News section (circled in red). Content2 yerleştirilmiş olan biçimlendirme sayfanın sağ bölümünde görüntülenir (mavi renkli daire içinde).The markup placed in Content2 is displayed in the right portion of the page (circled in blue).

Sol sütun artık Haberler bölümünün altındaki sayfaya özgü Içerikleri IçerirThe Left Column Now Includes Page-Specific Content Beneath the News Section

Şekil 03: sol sütun artık Haberler bölümünün altındaki sayfaya özgü içerikleri içerir (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 03: The Left Column Now Includes Page-Specific Content Beneath the News Section (Click to view full-size image)

Var olan Içerik sayfalarında Içerik tanımlamaDefining Content in Existing Content Pages

Yeni bir içerik sayfası oluşturmak, 1. adımda eklediğimiz ContentPlaceHolder denetimini otomatik olarak ekler.Creating a new content page automatically incorporates the ContentPlaceHolder control we added in Step 1. Ancak var olan iki içerik sayfamız-About.aspx ve Default.aspx-LeftColumnContent ContentPlaceHolder için bir Içerik denetimine sahip değildir.But our two existing content pages - About.aspx and Default.aspx - don't have a Content control for the LeftColumnContent ContentPlaceHolder. Bu iki sayfada bu ContentPlaceHolder 'ın içeriğini belirtmek için bir Içerik denetimi kendimize eklememiz gerekiyor.To specify content for this ContentPlaceHolder in these two existing pages, we need to add a Content control ourselves.

Çoğu ASP.NET Web denetiminin aksine, Visual Web Developer araç kutusu bir Içerik denetim öğesi içermez.Unlike most ASP.NET Web controls, the Visual Web Developer Toolbox does not include a Content control item. Kaynak görünümüne Içerik denetiminin bildirim temelli işaretlemesini el ile yazalım, ancak daha kolay ve daha hızlı bir yaklaşım Tasarım görünümü kullanmaktır.We can manually type in the Content control's declarative markup into the Source view, but an easier and quicker approach is to use the Design view. About.aspx sayfasını açın ve Tasarım görünümü geçin.Open the About.aspx page and switch to the Design view. Şekil 4 ' te gösterildiği gibi, Tasarım görünümü LeftColumnContent ContentPlaceHolder görüntülenir; üzerine fare eklerseniz, başlık şöyle görünür: "LeftColumnContent (Master)."As Figure 4 illustrates, the LeftColumnContent ContentPlaceHolder appears in the Design view; if you mouse over it, the title displayed reads: "LeftColumnContent (Master)." Başlığa "Master" eklenmesi, bu ContentPlaceHolder için sayfada tanımlanmış Içerik denetimi olmadığını gösterir.The inclusion of "Master" in the title indicates that there is no Content control defined in the page for this ContentPlaceHolder. ContentPlaceHolder için bir Içerik denetimi varsa, MainContentiçin başlık şu şekilde görünür: "ContentPlaceHolderID (Custom)."If there exists a Content control for the ContentPlaceHolder, as in the case for MainContent, the title will read: "ContentPlaceHolderID (Custom)."

About.aspx``LeftColumnContent ContentPlaceHolder için bir Içerik denetimi eklemek için, ContentPlaceHolder 'ın akıllı etiketini genişletin ve özel Içerik oluştur bağlantısına tıklayın.To add a Content control for the LeftColumnContent ContentPlaceHolder to About.aspx, expand the ContentPlaceHolder's smart tag and click the Create Custom Content link.

. aspx için Tasarım görünümünde, LeftColumnContent ContentPlaceHolder görüntülenirThe Design View for About.aspx Shows the LeftColumnContent ContentPlaceHolder

Şekil 04: About.aspx Için tasarım görünümü LeftColumnContent ContentPlaceHolder 'ı gösterir (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 04: The Design View for About.aspx Shows the LeftColumnContent ContentPlaceHolder (Click to view full-size image)

Özel Içerik oluştur bağlantısına tıkladığınızda sayfada gerekli Içerik denetimi oluşturulur ve ContentPlaceHolderID özelliği ContentPlaceHolder 'ın IDolarak ayarlanır.Clicking the Create Custom Content link generates the necessary Content control in the page and sets its ContentPlaceHolderID property to the ContentPlaceHolder's ID. Örneğin, About.aspx LeftColumnContent bölgesi için özel Içerik oluştur bağlantısına tıkladığınızda, aşağıdaki bildirim temelli biçimlendirmeyi sayfaya ekler:For example, clicking the Create Custom Content link for LeftColumnContent region in About.aspx adds the following declarative markup to the page:

<asp:Content ID="Content3" runat="server" contentplaceholderid="LeftColumnContent">
 
</asp:Content>

Içerik denetimlerini atlamaOmitting Content Controls

ASP.NET, tüm içerik sayfalarının ana sayfada tanımlanan her bir ve her ContentPlaceHolder için Içerik denetimlerini içermesini gerektirmez.ASP.NET does not require that all content pages include Content controls for each and every ContentPlaceHolder defined in the master page. Bir Içerik denetimi atlanırsa, ASP.NET altyapısı ana sayfada ContentPlaceHolder içinde tanımlanan biçimlendirmeyi kullanır.If a Content control is omitted, the ASP.NET engine uses the markup defined within the ContentPlaceHolder in the master page. Bu biçimlendirme, ContentPlaceHolder 'ın varsayılan içeriği olarak adlandırılır ve bazı bölgelere ait içeriğin sayfaların çoğunluğu arasında ortak olduğu, ancak az sayıda sayfa için özelleştirilme gereken senaryolarda faydalıdır.This markup is referred to as the ContentPlaceHolder's default content and is useful in scenarios where the content for some region is common among the majority of pages, but needs to be customized for a small number of pages. 3. adım ana sayfada varsayılan içeriği belirtmeyi araştırır.Step 3 explores specifying default content in the master page.

Şu anda Default.aspx head ve MainContent Contentyertutucuları için iki Içerik denetimi içerir; LeftColumnContentiçin bir Içerik denetimi yoktur.Currently, Default.aspx contains two Content controls for the head and MainContent ContentPlaceHolders; it does not have a Content control for LeftColumnContent. Sonuç olarak, Default.aspx işlendiğinde LeftColumnContent ContentPlaceHolder 'ın varsayılan içeriği kullanılır.Consequently, when Default.aspx is rendered the LeftColumnContent ContentPlaceHolder's default content is used. Henüz bu ContentPlaceHolder için herhangi bir varsayılan içerik tanımlanmadığımızda, net etkisi, bu bölge için hiçbir biçimlendirme yayınlanmamıştır.Because we have yet to define any default content for this ContentPlaceHolder, the net effect is that no markup is emitted for this region. Bu davranışı doğrulamak için Default.aspx bir tarayıcı üzerinden ziyaret edin.To verify this behavior, visit Default.aspx through a browser. Şekil 5 ' te gösterildiği gibi, Haberler bölümünün altındaki sol sütunda hiçbir işaretleme yayılmadı.As Figure 5 shows, no markup is emitted in the left column beneath the News section.

, LeftColumnContent ContentPlaceHolder için hiçbir Içerik IşlenmiyorNo Content is Rendered for the LeftColumnContent ContentPlaceHolder

Şekil 05: LeftColumnContent ContentPlaceHolder Için hiçbir içerik işlenmiyor (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 05: No Content is Rendered for the LeftColumnContent ContentPlaceHolder (Click to view full-size image)

3. Adım: Ana sayfada varsayılan Içeriği belirtmeStep 3: Specifying Default Content in the Master Page

Bazı Web sitesi tasarımları, bir veya iki özel durum dışında, içeriği sitedeki tüm sayfalar için aynı olan bir bölge içerir.Some website designs include a region whose content is the same for all pages in the site except for one or two exceptions. Kullanıcı hesaplarını destekleyen bir Web sitesi düşünün.Consider a website that supports user accounts. Bu tür bir site, ziyaretçilerin sitede oturum açmak için kimlik bilgilerini girebilecekleri bir oturum açma sayfası gerektirir.Such a site requires a login page where visitors can enter their credentials to sign into the site. Oturum açma işlemini hızlandırmak için, Web sitesi tasarımcıları her sayfanın sol üst köşesine Kullanıcı adı ve parola kutuları ekleyebilir ve kullanıcıların oturum açma sayfasını açıkça ziyaret etmesini sağlamak için oturum açmasını sağlar.To expedite the sign in process, the website designers might include username and password textboxes in the upper left corner of every page to allow users to sign in without having to explicitly visit the login page. Bu Kullanıcı adı ve parola kutuları pek çok sayfada yardımcı olmakla kalmaz, oturum açma sayfasında, kullanıcının kimlik bilgileri için zaten metin kutuları içeren, bunlar gereksizdir.While these username and password textboxes are helpful in most pages, they are redundant in the login page, which already contains textboxes for the user's credentials.

Bu tasarımı uygulamak için ana sayfanın sol üst köşesinde bir ContentPlaceHolder denetimi oluşturabilirsiniz.To implement this design, you could create a ContentPlaceHolder control in the upper left corner of the master page. Kullanıcı adı ve parola metin kutularını görüntülemesi gereken her sayfa, bu ContentPlaceHolder için bir Içerik denetimi oluşturur ve gerekli arabirimi ekler.Each page that needed to display the username and password textboxes in their upper left corner would create a Content control for this ContentPlaceHolder and add the necessary interface. Diğer yandan oturum açma sayfası, bu ContentPlaceHolder için bir Içerik denetimi eklemeyi ya da hiçbir işaretleme tanımlanmadığında bir Içerik denetimi oluşturmayı yok sayacaktır.The login page, on the other hand, would either omit adding a Content control for this ContentPlaceHolder or would create a Content control with no markup defined. Bu yaklaşımın aşağı tarafında, siteye eklediğimiz her sayfaya (oturum açma sayfası hariç) Kullanıcı adı ve parola metin kutuları eklemeyi unutmamanız gerekir.The downside of this approach is that we have to remember to add the username and password textboxes to every page we add to the site (except for the login page). Bu sorun sizi istiyor.This is asking for trouble. Bu metin kutularını bir sayfaya ya da daha kötüleştireceğiz, arabirimi doğru bir şekilde uygulayamazyız (Belki de iki tane yerine yalnızca bir TextBox ekleyebilirsiniz).We're likely to forget to add these textboxes to a page or two or, worse, we might not implement the interface correctly (perhaps adding just one textbox instead of two).

Daha iyi bir çözüm, ContentPlaceHolder 'ın varsayılan içeriğiyle Kullanıcı adı ve parola metin kutuları tanımlamaktır.A better solution is to define the username and password textboxes as the ContentPlaceHolder's default content. Bunu yaptığınızda, bu varsayılan içeriği yalnızca Kullanıcı adı ve parola metin kutuları (örneğin, oturum açma sayfası) görüntülemek.By doing so, we only need to override this default content in those few pages that do not display the username and password textboxes (the login page, for instance). ContentPlaceHolder denetimine yönelik varsayılan içerik belirtmeyi göstermek için, yalnızca tartışılan senaryoyu uygulayalim.To illustrate specifying default content for a ContentPlaceHolder control, let's implement the scenario just discussed.

Note

Bu öğreticinin geri kalanı, Web sitemizi tüm sayfalar için sol sütuna, ancak oturum açma sayfasına yönelik bir oturum açma arabirimi içerecek şekilde güncelleştirir.The remainder of this tutorial updates our website to include a login interface in the left column for all pages but the login page. Ancak, bu öğretici Web sitesinin kullanıcı hesaplarını destekleyecek şekilde nasıl yapılandırılacağını incelemez.However, this tutorial does not examine how to configure the website to support user accounts. Bu konu hakkında daha fazla bilgi için formlarım kimlik doğrulaması, yetkilendirme, Kullanıcı hesapları ve rol öğreticilerimize bakın.For more information on this topic, refer to my Forms Authentication, Authorization, User Accounts and Roles tutorials.

ContentPlaceHolder ekleme ve varsayılan Içeriğini belirtmeAdding a ContentPlaceHolder and Specifying Its Default Content

Site.master ana sayfasını açın ve DateDisplay etiketi ile dersler bölümü arasındaki sol sütuna aşağıdaki biçimlendirmeyi ekleyin:Open the Site.master master page and add the following markup to the left column between the DateDisplay Label and Lessons section:

<asp:ContentPlaceHolder ID="QuickLoginUI" runat="server">
 <asp:Login ID="QuickLogin" runat="server" 
    TitleText="<h3>Sign In</h3>"
    FailureAction="RedirectToLoginPage">
 </asp:Login>
</asp:ContentPlaceHolder>

Bu biçimlendirmeyi ekledikten sonra ana sayfanızın Tasarım görünümü Şekil 6 ' ya benzer görünmelidir.After adding this markup your master page's Design view should look similar to Figure 6.

Ana sayfa bir oturum açma denetimi Içerir The Master Page Includes a Login Control

Şekil 06: Ana sayfa bir oturum açma denetimi içerir (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 06: The Master Page Includes a Login Control (Click to view full-size image)

Bu ContentPlaceHolder QuickLoginUI, varsayılan içeriği olarak bir oturum açma Web denetimine sahiptir.This ContentPlaceHolder, QuickLoginUI, has a Login Web control as its default content. Oturum açma denetimi, kullanıcıdan bir oturum açma düğmesi ile birlikte Kullanıcı adı ve parola girmesini isteyen bir kullanıcı arabirimi görüntüler.The Login control displays a user interface that prompts the user for their username and password along with a Log In button. Oturum Aç düğmesine tıklandıktan sonra oturum açma denetimi, kullanıcının kimlik bilgilerini üyelik API 'sine göre dahili olarak doğrular.Upon clicking the Log In button, the Login control internally validates the user's credentials against the Membership API. Bu oturum açma denetimini uygulamada kullanmak için, sitenizi üyelik kullanacak şekilde yapılandırmanız gerekir.To use this Login control in practice, then, you need to configure your site to use Membership. Bu konu, Bu öğreticinin kapsamı dışındadır. Kullanıcı hesaplarını destekleyen bir Web uygulaması oluşturma hakkında daha fazla bilgi için form kimlik doğrulaması, yetkilendirme, Kullanıcı hesapları ve rol öğreticilerime bakın.This topic is beyond the scope of this tutorial; refer to my Forms Authentication, Authorization, User Accounts and Roles tutorials for more information on building a web application that supports user accounts.

Oturum açma denetiminin davranışını veya görünümünü özelleştirmek için ücretsizdir.Feel free to customize the Login control's behavior or appearance. Özelliklerinden ikisini de ayarladı: TitleText ve FailureAction.I have set two of its properties: TitleText and FailureAction. Varsayılan olarak "oturum aç" olan TitleText Özellik değeri, denetimin kullanıcı arabiriminin en üstünde görüntülenir.The TitleText property value, which defaults to "Log In", is displayed at the top of the control's user interface. Bu özelliği, bir <h3> öğesi olarak "oturum aç" metnini görüntüleyecek şekilde ayarladı.I have set this property so that it displays the text "Sign In" as an <h3> element. FailureAction özelliği, kullanıcının kimlik bilgileri geçersizse ne yapılacağını belirtir.The FailureAction property indicates what to do if the user's credentials are invalid. Bu, kullanıcıyı aynı sayfada bırakan ve oturum açma denetimi içinde bir hata iletisi görüntüleyen Refreshbir değeri varsayılan olarak alır.It defaults to a value of Refresh, which leaves the user on the same page and displays a failure message within the Login control. Kullanıcıyı geçersiz kimlik bilgileri olayında oturum açma sayfasına gönderen RedirectToLoginPageolarak değiştirdim.I've changed it to RedirectToLoginPage, which sends the user to the login page in the event of invalid credentials. Kullanıcı başka bir sayfadan oturum açmaya çalıştığında Kullanıcı oturum açma sayfasına göndermek istiyorum, ancak oturum açma sayfası, sol sütuna kolayca sığmayan ek yönergeler ve seçenekler içerebildiğinden, başarısız olur.I prefer to send the user to the login page when a user attempts to login from some other page, but fails, because the login page can contain additional instructions and options that would not easily fit into the left column. Örneğin, oturum açma sayfası unutulmuş bir parolayı alma veya yeni bir hesap oluşturma seçeneklerini içerebilir.For example, the login page might include options to retrieve a forgotten password or to create a new account.

Oturum açma sayfası oluşturma ve varsayılan Içeriği geçersiz kılmaCreating the Login Page and Overriding the Default Content

Ana sayfa tamamlandıktan sonra bir sonraki adımımız oturum açma sayfası oluşturmaktır.With the master page complete, our next step is to create the login page. Sitenizin Login.aspxadlı kök dizinine Site.master ana sayfasına bağlayarak bir ASP.NET sayfası ekleyin.Add an ASP.NET page to your site's root directory named Login.aspx, binding it to the Site.master master page. Bunun yapılması, Site.master' de tanımlanan her bir Contenttutucuları için bir tane olmak üzere dört Içerik denetimi içeren bir sayfa oluşturur.Doing so will create a page with four Content controls, one for each of the ContentPlaceHolders defined in Site.master.

MainContent Içerik denetimine bir oturum açma denetimi ekleyin.Add a Login control to the MainContent Content control. Benzer şekilde, LeftColumnContent bölgeye herhangi bir içerik eklemek ücretsizdir.Likewise, feel free to add any content to the LeftColumnContent region. Ancak, QuickLoginUI ContentPlaceHolder boş olan Içerik denetimini ayrıldığınızdan emin olun.However, make sure to leave the Content control for the QuickLoginUI ContentPlaceHolder empty. Bu, oturum açma denetiminin, oturum açma sayfasının sol sütununda görünmemesini güvence altına alacak.This will ensure that the Login control does not appear in the left column of the login page.

MainContent ve LeftColumnContent bölgeleri için içerik tanımladıktan sonra, oturum açma sayfanızın bildirim temelli işaretleme aşağıdakine benzer olmalıdır:After defining the content for the MainContent and LeftColumnContent regions, your login page's declarative markup should look similar to the following:

<%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Login.aspx.cs" Inherits="Login" Title="Untitled Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" Runat="Server">
 <h2>
 Sign In</h2>
 <p>
 <asp:Login ID="Login1" runat="server" TitleText="">
 </asp:Login>
 </p>
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="QuickLoginUI" Runat="Server">
</asp:Content>
<asp:Content ID="Content4" ContentPlaceHolderID="LeftColumnContent" Runat="Server">
 <h3>Sign In Tasks</h3>
 <ul>
 <li>Create a New Account</li>
 <li>Recover Forgotten Password</li>
 </ul>
 <p>TODO: Turn the above text into links...</p>
</asp:Content>

Şekil 7 ' de bir tarayıcıdan görüntülendiklerinde Bu sayfa gösterilmektedir.Figure 7 shows this page when viewed through a browser. Bu sayfa, QuickLoginUI ContentPlaceHolder için bir Içerik denetimi belirttiğinden, ana sayfada belirtilen varsayılan içeriği geçersiz kılar.Because this page specifies a Content control for the QuickLoginUI ContentPlaceHolder, it overrides the default content specified in the master page. Net etkisi, ana sayfa Tasarım görünümü (Şekil 6 ' da) görüntülenen oturum açma denetiminin bu sayfada işlenmeyecektir.The net effect is that the Login control displayed in the master page's Design view (see Figure 6) is not rendered in this page.

represses oturum açma sayfası, Quickloginuı ContentPlaceHolder 'ın varsayılan Içeriğini The Login Page Represses the QuickLoginUI ContentPlaceHolder's Default Content

Şekil 07: oturum açma sayfası, QuickLoginUI ContentPlaceHolder 'ın varsayılan içeriğini represses (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 07: The Login Page Represses the QuickLoginUI ContentPlaceHolder's Default Content (Click to view full-size image)

Yeni sayfalarda varsayılan Içeriği kullanmaUsing the Default Content in New Pages

Oturum açma sayfası dışındaki tüm sayfalar için oturum açma denetimini sol sütunda göstermek istiyoruz.We want to show the Login control in the left column for all pages except the Login page. Bunu başarmak için, oturum açma sayfası hariç tüm içerik sayfaları, ContentPlaceHolder QuickLoginUI bir Içerik denetimini atmalıdır.To achieve this, all the content pages except for the login page should omit a Content control for the QuickLoginUI ContentPlaceHolder. Bir Içerik denetimini atlayarak, bunun yerine ContentPlaceHolder 'ın varsayılan içeriği kullanılacaktır.By omitting a Content control, the ContentPlaceHolder's default content will be used instead.

Var olan içerik sayfalarımız-Default.aspx, About.aspxve MultipleContentPlaceHolders.aspx, bu ContentPlaceHolder denetimini ana sayfaya eklemeden önce oluşturulduğundan QuickLoginUI için bir Içerik denetimi eklemeyin.Our existing content pages - Default.aspx, About.aspx, and MultipleContentPlaceHolders.aspx - do not include a Content control for QuickLoginUI because they were created before we added that ContentPlaceHolder control to the master page. Bu nedenle, bu mevcut sayfaların güncelleştirilmesine gerek yoktur.Therefore, these existing pages do not need to be updated. Ancak, Web sitesine eklenen yeni sayfalar, varsayılan olarak QuickLoginUI ContentPlaceHolder için bir Içerik denetimi içerir.However, new pages added to the website include a Content control for the QuickLoginUI ContentPlaceHolder, by default. Bu nedenle, her yeni içerik sayfası eklediğimiz her seferinde bu Içerik denetimlerini kaldırmayı unutmamanız gerekir (oturum açma sayfası durumunda olduğu gibi, ContentPlaceHolder 'ın varsayılan içeriğini geçersiz kılmak istediğimiz sürece).Therefore, we have to remember to remove these Content controls each time we add a new content page (unless we want to override the ContentPlaceHolder's default content, as in the case of the login page).

Içerik denetimini kaldırmak için, bildirim temelli işaretlemesini kaynak görünümden el ile silebilir veya Tasarım görünümü, varsayılan olarak, akıllı etiketindeki ana Içerik bağlantısı ' nı seçin.To remove the Content control, you can either manually delete its declarative markup from the Source view or, from the Design view, choose the Default to Master's Content link from its smart tag. Her iki yaklaşım da Içerik denetimini sayfadan kaldırır ve aynı net etkiyi üretir.Either approach removes the Content control from the page and produces the same net effect.

Şekil 8 ' de bir tarayıcıdan görüntülendiklerinde Default.aspx gösterilmektedir.Figure 8 shows Default.aspx when viewed through a browser. Default.aspx, bildirim temelli işaretlerde bir tane head ve biri MainContentiçin belirtilen iki Içerik denetimine sahip olduğunu hatırlayın.Recall that Default.aspx only has two Content controls specified in its declarative markup - one for head and one for MainContent. Sonuç olarak, LeftColumnContent ve QuickLoginUI Contentyertutucuları için varsayılan içerik görüntülenir.As a result, the default content for the LeftColumnContent and QuickLoginUI ContentPlaceHolders are displayed.

LeftColumnContent ve Quickloginuı Contentyertutucuları için varsayılan Içerik görüntülenirThe Default Content for the LeftColumnContent and QuickLoginUI ContentPlaceHolders are Displayed

Şekil 08: LeftColumnContent ve QuickLoginUI Contentyertutucuları Için varsayılan içerik görüntülenir (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 08: The Default Content for the LeftColumnContent and QuickLoginUI ContentPlaceHolders are Displayed (Click to view full-size image)

ÖzetSummary

ASP.NET ana sayfa modeli, ana sayfada rastgele sayıda Contentyer tutucu sağlar.The ASP.NET master page model allows for an arbitrary number of ContentPlaceHolders in the master page. Daha fazlası, içerik yer tutucuları, içerik sayfasında karşılık gelen Içerik denetimi olmaması durumunda oluşturulan varsayılan içeriğe sahiptir.What's more, ContentPlaceHolders include default content, which is emitted in the case that there is no corresponding Content control in the content page. Bu öğreticide, ana sayfaya ek ContentPlaceHolder denetimlerinin nasıl ekleneceğini ve hem yeni hem de var olan ASP.NET sayfalarındaki bu yeni Contentyertutucuları için Içerik denetimlerinin nasıl tanımlanacağını gördük.In this tutorial we saw how to include additional ContentPlaceHolder controls in the master page and how to define Content controls for these new ContentPlaceHolders in both new and existing ASP.NET pages. Ayrıca, bir ContentPlaceHolder 'da varsayılan içerik belirtmekten de bakıyoruz. Bu, yalnızca en az sayıda sayfanın belirli bir bölgedeki standart olmayan içeriği özelleştirmesini gerektiren senaryolarda faydalıdır.We also looked at specifying default content in a ContentPlaceHolder, which is useful in scenarios where only a minority of pages needs to customize the otherwise standardized content within a certain region.

Sonraki öğreticide, bir sayfa temelinde başlık, meta etiketler ve diğer HTML üst bilgilerini bildirimli ve programlı bir şekilde tanımlama hakkında daha ayrıntılı bilgi için head ContentPlaceHolder ' ı inceleyeceğiz.In the next tutorial we'll examine the head ContentPlaceHolder in more detail, seeing how to declaratively and programmatically define the title, meta tags, and other HTML headers on a page-by-page basis.

Programlamanın kutlu olsun!Happy Programming!

Yazar hakkındaAbout the Author

Birden çok ASP/ASP. NET Books ve 4GuysFromRolla.com 'in yazarı Scott Mitchell, 1998 sürümünden bu yana Microsoft Web teknolojileriyle birlikte çalışıyor.Scott Mitchell, author of multiple ASP/ASP.NET books and founder of 4GuysFromRolla.com, has been working with Microsoft Web technologies since 1998. Scott bağımsız danışman, Trainer ve yazıcı olarak çalışıyor.Scott works as an independent consultant, trainer, and writer. En son kitabı, 24 saat içinde ASP.NET 3,5 kendi kendinize eğitimister.His latest book is Sams Teach Yourself ASP.NET 3.5 in 24 Hours. Scott 'a mitchell@4GuysFromRolla.com veya blogundan http://ScottOnWriting.NETüzerinden erişilebilir.Scott can be reached at mitchell@4GuysFromRolla.com or via his blog at http://ScottOnWriting.NET.

Özel olarak teşekkürlerSpecial Thanks To

Bu öğretici serisi birçok yararlı gözden geçirenler tarafından incelendi.This tutorial series was reviewed by many helpful reviewers. Bu öğretici için lider gözden geçiren Suçi Banerjee idi.Lead reviewer for this tutorial was Suchi Banerjee. Yaklaşan MSDN makalelerimi gözden geçiriyor musunuz?Interested in reviewing my upcoming MSDN articles? Öyleyse, beni mitchell@4GuysFromRolla.combir satır bırakın.If so, drop me a line at mitchell@4GuysFromRolla.com.