private WebPageContext CreatePageContextFromParameters(bool isLayoutPage, params object[] data) { object first = null; if (data != null && data.Length > 0) { first = data[0]; } var pageData = PageDataDictionary <dynamic> .CreatePageDataFromParameters(PageData, data); return(Util.CreateNestedPageContext(PageContext, pageData, first, isLayoutPage)); }
// Creates a new PageData dictionary using only the original items from the pageData (excluding the string dictionary and indexed list), // and adding the parameters. internal static IDictionary <object, dynamic> CreatePageDataFromParameters( IDictionary <object, dynamic> previousPageData, params object[] data ) { var oldPageData = previousPageData as PageDataDictionary <dynamic>; // Add the original items var pageData = new PageDataDictionary <dynamic>(); foreach (var kvp in oldPageData.Data) { pageData.Data.Add(kvp); } if (data != null && data.Length > 0) { // Add items to the indexed list for (int i = 0; i < data.Length; i++) { pageData.IndexedValues.Add(data[i]); } // Check for anonymous types, and add to the string dictionary object first = data[0]; Type type = first.GetType(); if (TypeHelper.IsAnonymousType(type)) { // Anonymous type TypeHelper.AddAnonymousObjectToDictionary(pageData.StringDictionary, first); } // Check if the first element is of type IDictionary<string, object> if (typeof(IDictionary <string, object>).IsAssignableFrom(type)) { // Dictionary var stringDictionary = first as IDictionary <string, object>; foreach (var kvp in stringDictionary) { pageData.StringDictionary.Add(kvp); } } } return(pageData); }
public DynamicPageDataDictionary(PageDataDictionary <TValue> dictionary) { _data = dictionary; }