Document IDocumentFactory.CreateDocument(DocumentProjectItem projectItem, bool readOnly, DocumentMode mode, DocumentViewType initialView, out DocumentWindow documentWindow, out DesignerHost designerHost) { if (projectItem == null) { throw new ArgumentNullException("projectItem"); } if (initialView == DocumentViewType.Default) { initialView = WebPackage.Instance.WebDefaultView; if (initialView == DocumentViewType.Source) { initialView = DocumentViewType.Composite; } } documentWindow = null; AscxDocument document = new AscxDocument(projectItem); designerHost = new WebFormsDesignerHost(document); document.Load(readOnly); Page page = null; UserControl child = null; if (document.DocumentDirective.Inherits.ToLower().IndexOf("mobile") < 0) { page = new Page(); child = new UserControl(); child.ID = "Page"; documentWindow = new AscxDocumentWindow(designerHost, document, initialView); page.Site = new AscxPageSite(designerHost, page); page.DesignerInitialize(); page.Controls.Add(child); } else { if (!_mobileAssemblyLoadFailed) { if (_mobileAssembly == null) { _mobileAssembly = Assembly.LoadWithPartialName(_mobileAssemblyName); } if (_mobileAssembly != null) { document.Dispose(); document = new AscxDocument(projectItem); Type type = _mobileAssembly.GetType("System.Web.UI.MobileControls.MobilePage"); Type type2 = _mobileAssembly.GetType("System.Web.UI.MobileControls.MobileUserControl"); Type type3 = _mobileAssembly.GetType("System.Web.UI.MobileControls.Form"); page = (Page) Activator.CreateInstance(type); child = (UserControl) Activator.CreateInstance(type2); Control control2 = (Control) Activator.CreateInstance(type3); Type type4 = Type.GetType("Microsoft.Matrix.Packages.Web.Mobile.MobileDesignerHost, Microsoft.Matrix.Packages.Web.Mobile"); designerHost = (DesignerHost) Activator.CreateInstance(type4, new object[] { document }); document.Load(readOnly); Type type5 = Type.GetType("Microsoft.Matrix.Packages.Web.Mobile.MobileWebFormsDocumentWindow, Microsoft.Matrix.Packages.Web.Mobile"); documentWindow = (DocumentWindow) Activator.CreateInstance(type5, new object[] { designerHost, document, initialView }); page.Site = new AscxPageSite(designerHost, page); page.DesignerInitialize(); page.Controls.Add(control2); control2.Controls.Add(child); } else { _mobileAssemblyLoadFailed = true; } } if (_mobileAssemblyLoadFailed) { document.Dispose(); Document document2 = new TextDocument(projectItem); designerHost = new DesignerHost(document2); ((IMxUIService) designerHost.GetService(typeof(IMxUIService))).ReportError("Microsoft Mobile Internet Toolkit is required for design-time editing of mobile user controls.\r\nPlease visit 'http://www.asp.net/mobile/default.aspx' for more information.\r\nThe user control will be opened in the text editor instead.", "Mobile User Controls are not enabled.", true); document2.Load(readOnly); documentWindow = new TextDocumentWindow(designerHost, document2); return document2; } } IDesignerHost host = designerHost; host.Container.Add(child, "UserControl"); child.DesignerInitialize(); return document; }
private string GenerateDesignTimeHtml(DocumentProjectItem projectItem) { string str = null; WebFormsDesignerHost designerHost = null; try { AscxDocument document = new AscxDocument(projectItem); designerHost = new WebFormsDesignerHost(document); document.Load(true); str = string.Empty; string html = document.Html; string directives = document.RegisterDirectives.ToString(); string controlText = "<asp:PlaceHolder runat=\"server\">" + html + "</asp:PlaceHolder>"; Control control = ControlParser.ParseControl(designerHost, controlText, directives); if ((control == null) || !control.HasControls()) { return str; } IDesignerHost host2 = designerHost; IContainer container = host2.Container; StringBuilder builder = new StringBuilder(0x400); bool flag = false; foreach (Control control2 in control.Controls) { if (!(control2 is LiteralControl)) { if (!flag) { flag = true; Page component = new Page(); component.ID = "Page"; container.Add(component, "Page"); component.DesignerInitialize(); } container.Add(control2); } } foreach (Control control4 in control.Controls) { LiteralControl control5 = control4 as LiteralControl; if (control5 != null) { builder.Append(control5.Text); } else { ControlDesigner designer = (ControlDesigner) host2.GetDesigner(control4); try { string designTimeHtml = designer.GetDesignTimeHtml(); builder.Append(designTimeHtml); continue; } catch { continue; } } } str = builder.ToString(); } catch (Exception) { } finally { if (designerHost != null) { ((IDisposable) designerHost).Dispose(); designerHost = null; } } return str; }