/// <summary> /// Initializes a new instance of the <see cref="StubMonoRailServices"/> class. /// </summary> /// <param name="urlBuilder">The URL builder.</param> /// <param name="filterFactory">The filter factory.</param> /// <param name="viewEngineManager">The view engine manager.</param> /// <param name="actionSelector">The action selector.</param> /// <param name="dynamicActionProviderFactory">The dynamic action provider factory.</param> public StubMonoRailServices(IUrlBuilder urlBuilder, IFilterFactory filterFactory, IViewEngineManager viewEngineManager, IActionSelector actionSelector, IDynamicActionProviderFactory dynamicActionProviderFactory) { this.UrlBuilder = urlBuilder; this.FilterFactory = filterFactory; this.ViewEngineManager = viewEngineManager; this.ActionSelector = actionSelector; this.DynamicActionProviderFactory = dynamicActionProviderFactory; controllerTree = new DefaultControllerTree(); ControllerFactory = new DefaultControllerFactory(controllerTree); StaticResourceRegistry = new DefaultStaticResourceRegistry(); ControllerContextFactory = new DefaultControllerContextFactory(); ControllerDescriptorProvider = new DefaultControllerDescriptorProvider( new DefaultHelperDescriptorProvider(), new DefaultFilterDescriptorProvider(), new DefaultLayoutDescriptorProvider(), new DefaultRescueDescriptorProvider(), new DefaultResourceDescriptorProvider(), new DefaultTransformFilterDescriptorProvider(), new DefaultReturnBinderDescriptorProvider(), new DefaultDynamicActionProviderDescriptorProvider()); ResourceFactory = new DefaultResourceFactory(); ScaffoldingSupport = new StubScaffoldingSupport(); CacheProvider = new StubCacheProvider(); HelperFactory = new DefaultHelperFactory(); ServiceInitializer = new DefaultServiceInitializer(); ExtensionManager = new ExtensionManager(this); ValidatorRegistry = new CachedValidationRegistry(); JSONSerializer = new NewtonsoftJSONSerializer(); DictionaryAdapterFactory = new DictionaryAdapterFactory(); ScriptBuilder = new DefaultScriptBuilder(); }
public virtual string Render(ControllerContext context, string viewName, ViewDataDictionary viewData, object model, TempDataDictionary tempData, IDMode idMode, string controlId) { if (context == null) { throw new ArgumentNullException("context"); } if (String.IsNullOrEmpty(viewName)) { viewName = context.RouteData.GetRequiredString("action"); } //string path = PartialViewResult.FindView(context, viewName); string id = controlId ?? "ID_" + Guid.NewGuid().ToString().Replace("-", ""); string ct = "ID_" + Guid.NewGuid().ToString().Replace("-", ""); ViewDataDictionary newViewData = null; if (model == null) { if (viewData == null) { newViewData = new ViewDataDictionary(); } else { newViewData = new ViewDataDictionary(viewData); } } else { if (viewData == null) { newViewData = new ViewDataDictionary(model); } else { newViewData = new ViewDataDictionary(viewData) { Model = model }; } } ViewEngineResult result = ViewEngines.Engines.FindPartialView(context, viewName); IView view = result.View; string path = ((WebFormView)view).ViewPath; ViewContext viewContext = new ViewContext(context, view, newViewData, tempData ?? new TempDataDictionary(), context.HttpContext.Response.Output); PartialViewPage pageHolder = new PartialViewPage { ViewData = newViewData, ViewContext = viewContext }; var curRM = HttpContext.Current.Items[typeof(ResourceManager)]; HttpContext.Current.Items[typeof(ResourceManager)] = null; object oldPageRM = null; if (context.HttpContext.CurrentHandler is Page) { oldPageRM = ((Page)HttpContext.Current.CurrentHandler).Items[typeof(ResourceManager)]; ((Page)HttpContext.Current.CurrentHandler).Items[typeof(ResourceManager)] = null; } ResourceManager rm = new ResourceManager(); rm.RenderScripts = ResourceLocationType.None; rm.RenderStyles = ResourceLocationType.None; rm.IDMode = idMode; pageHolder.Controls.Add(rm); Panel p = new Panel { ID = id, IDMode = idMode, Border = false, Header = false }; pageHolder.Controls.Add(p); ViewUserControl uc = (ViewUserControl)pageHolder.LoadControl(path); uc.ID = id + "_UC"; uc.ViewData = newViewData; p.ContentControls.Add(uc); pageHolder.InitHelpers(); string wScript = DefaultScriptBuilder.Create(p).Build(RenderMode.RenderTo, ct, null, true, true); string script = string.Format("<div id=\"{0}\"></div><script type=\"text/javascript\">Ext.onReady(function(){{{1}}});</script>", ct, wScript); IDisposable disposable = view as IDisposable; if (disposable != null) { disposable.Dispose(); } HttpContext.Current.Items[typeof(ResourceManager)] = curRM; if (context.HttpContext.CurrentHandler is Page) { ((Page)HttpContext.Current.CurrentHandler).Items[typeof(ResourceManager)] = oldPageRM; } return(script); }