Retrieve all Master Pages for a SharePoint Site

apicamlmosssharepointsharepoint-2007

How can I determine programmatically what master pages (custom and OOTB) that are available for to use for a web site in SharePoint?

Thanks, MagicAndi

Best Answer

I came up with this solution, making use of a SPQuery object to query the team site collection's Master Page Gallery list:

try
{
    using (SPSite site = new SPSite(this.ParentSiteUrl))
    {
            using (SPWeb web = site.OpenWeb())
            {
                SPList myList = web.Lists["Master Page Gallery"];
                SPQuery oQuery = new SPQuery();
                oQuery.Query = string.Format("<Where><Contains><FieldRef Name=\"FileLeafRef\" /><Value Type=\"File\">.master</Value></Contains></Where><OrderBy><FieldRef Name=\"FileLeafRef\" /></OrderBy>");
                SPListItemCollection colListItems = myList.GetItems(oQuery);

                foreach (SPListItem currentItem in colListItems)
                {
                   // Process master pages
                }
        }
    }
}
catch (Exception ex)
{
}