File: Compilation\MasterPageCodeDomTreeGenerator.cs
Project: ndp\fx\src\xsp\system\Web\System.Web.csproj (System.Web)
//------------------------------------------------------------------------------
// <copyright file="MasterPageCodeDomTreeGenerator.cs" company="Microsoft">
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>                                                                
//------------------------------------------------------------------------------
 
namespace System.Web.Compilation {
 
    using System;
    using System.CodeDom;
    using System.Globalization;
    using System.Web.UI;
 
    internal class MasterPageCodeDomTreeGenerator : TemplateControlCodeDomTreeGenerator {
 
        private const string _masterPropertyName = "Master";
        protected MasterPageParser _masterPageParser;
        MasterPageParser Parser { get { return _masterPageParser; } }
 
        internal MasterPageCodeDomTreeGenerator(MasterPageParser parser) : base(parser) {
            _masterPageParser = parser;
        }
 
        protected override void BuildDefaultConstructor() {
            base.BuildDefaultConstructor();
 
            foreach(string placeHolderID in Parser.PlaceHolderList) {
                BuildAddContentPlaceHolderNames(InitMethod, placeHolderID);
            }
        }
 
        private void BuildAddContentPlaceHolderNames(CodeMemberMethod method, string placeHolderID) {
            CodePropertyReferenceExpression propertyExpr = new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), "ContentPlaceHolders");
            CodeExpressionStatement stmt = new CodeExpressionStatement();
            stmt.Expression = new CodeMethodInvokeExpression(propertyExpr, "Add", new CodePrimitiveExpression(placeHolderID.ToLower(CultureInfo.InvariantCulture)));
 
            method.Statements.Add(stmt);
        }
 
        protected override void BuildMiscClassMembers() {
            base.BuildMiscClassMembers();
 
            if (Parser.MasterPageType != null)
                BuildStronglyTypedProperty(_masterPropertyName, Parser.MasterPageType);
        }
    }
}