November Happy Hour will be moved to Thursday December 5th.
November Happy Hour will be moved to Thursday December 5th.
Previously we've used IFrameComponent in WebForms to make quick plugins for EPiServer. Just create an .aspx that has the attribute IFrameComponent and inherits from ContentWebFormsBase.
[IFrameComponent(Url = "~/Plugins/PublishedTo.aspx", ReloadOnContextChange = true, PlugInAreas = "/episerver/cms/assets", Title = "Document connector", Categories = "cms", MinHeight = 100, MaxHeight = 500)] public partial class PublishedTo : EPiServer.Shell.WebForms.ContentWebFormsBase { // .... }
If you want to use MVC, have a look at this blog post: https://devblog.gosso.se/2017/06/convert-deprecated-gadgets-to-components-in-episerver/
Good luck!
I have tried making a MVC IFrameComponent from the guide above
[IFrameComponent(Url = "EventReportComponent", Categories = "dashboard", Title = "Get reports for Events", MinHeight = 300)] public class EventReportComponentController : Controller { //[Authorize(Roles = "WebEditors,WebAdmins")] public ActionResult Index() { return View(); } } RouteTable.Routes.MapRoute("EventReportDashboard", "/EventReportComponent/{action}", new { controller = "EventReportComponent", action = "index", id = UrlParameter.Optional });
With the above code I get this exception:
Can't resolve non-rooted path 'EventReportComponent'
If I add a slash to: IFrameComponent(Url = "/EventReportComponent", i get this error:
EPiServer.ServiceLocation.ActivationException: Activation error occurred while trying to get instance of type EPiDashboardController, key "" ---> StructureMap.Building.StructureMapBuildException: Error while building type EPiServer.Shell.ViewComposition.DefaultViewManager. See the inner exception for details 1.) new DefaultViewManager(Enumerable of EPiServer.Shell.ViewComposition.IViewProvider with all registered instances, Enumerable of EPiServer.Shell.ViewComposition.IViewTransformer with all registered instances, *Default of IComponentManager*) 2.) EPiServer.Shell.ViewComposition.DefaultViewManager 3.) Instance of EPiServer.Shell.ViewComposition.IViewManager (EPiServer.Shell.ViewComposition.DefaultViewManager) 4.) new Bootstrapper(*Default of IViewManager*, *Default of ModuleTable*, *Default of IClientResourceService*) 5.) EPiServer.Shell.UI.Bootstrapper 6.) Instance of EPiServer.Shell.Web.Mvc.IBootstrapper (EPiServer.Shell.UI.Bootstrapper) 7.) new EPiDashboardController(*Default of IBootstrapper*) 8.) EPiServer.Shell.UI.Controllers.EPiDashboardController 9.) Instance of EPiServer.Shell.UI.Controllers.EPiDashboardController 10.) Container.GetInstance(EPiServer.Shell.UI.Controllers.EPiDashboardController) ---> System.ArgumentException: Unable to find a module by assembly 'Vertica.**.Website, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' Parameter name: moduleAssembly at EPiServer.Shell.Paths.ToResource(Assembly moduleAssembly, String moduleRelativeResourcePath) at EPiServer.Shell.ViewComposition.IFrameComponentAttribute.CreateComponentDefinition(Type attributedType) at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) at EPiServer.Shell.ViewComposition.AttributedComponentProvider.GetComponentDefinitions() at EPiServer.Shell.ViewComposition.ComponentManager.ListAll() at EPiServer.Shell.ViewComposition.DefaultViewManager..ctor(IEnumerable`1 viewProviders, IEnumerable`1 viewTransformers, IComponentManager componentManager) at lambda_method(Closure , IBuildSession , IContext ) --- End of inner exception stack trace --- at lambda_method(Closure , IBuildSession , IContext ) at StructureMap.Building.BuildPlan.Build(IBuildSession session, IContext context) in c:\BuildAgent\work\a395dbde6b793293\src\StructureMap\Building\BuildPlan.cs:line 151 at StructureMap.SessionCache.GetObject(Type pluginType, Instance instance, ILifecycle lifecycle) in c:\BuildAgent\work\a395dbde6b793293\src\StructureMap\SessionCache.cs:line 93 at StructureMap.SessionCache.GetDefault(Type pluginType, IPipelineGraph pipelineGraph) in c:\BuildAgent\work\a395dbde6b793293\src\StructureMap\SessionCache.cs:line 68 at StructureMap.Container.GetInstance(Type pluginType) in c:\BuildAgent\work\a395dbde6b793293\src\StructureMap\Container.cs:line 337 at EPiServer.ServiceLocation.ServiceLocatorImplBase.GetInstance(Type serviceType, String key) --- End of inner exception stack trace --- at EPiServer.ServiceLocation.ServiceLocatorImplBase.GetInstance(Type serviceType, String key) at EPiServer.Shell.Web.Mvc.ModuleControllerFactory.CreateController(RequestContext requestContext, String controllerName) at EPiServer.Shell.Web.Mvc.ModuleMvcHandler.ProcessRequestInit(HttpContextBase httpContext) at EPiServer.Shell.Web.Mvc.ModuleMvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
I seems to be goging well a good part of the way until it somehow expects something different?!
(I ofcause have the IFrameComponent in the same assembly as the websitet)
I get the same error Morten Holmgaard dit you find a way to use IFrameComponent
ah i found the error, looking here: https://blog.mathiaskunto.com/2015/01/25/episerver-7-5-argumentexception-unable-to-find-a-module-by-assembly-assembly-version1-0-0-0-cultureneutral-publickeytokennull/
Hi.
I ran in to similar problem.
First thing was that the url was specified wrong. I was missing a "/" and you should add the action after aswell.
Second was that i had to add my project assembly to web.config in protectedModules.
[IFrameComponent( Url = "/MissingHousePagesComponent/Index", Categories = "dashboard", Title = "Get reports for Events", PlugInAreas = PlugInArea.AssetsDefaultGroup, MinHeight = 300)] public class MissingHousePagesComponentController : Controller { //[Authorize(Roles = "WebEditors,WebAdmins")] public ActionResult Index() { return View("~/Views/Gadgets/MissingHousePages/Index.cshtml"); } }
<protectedModules rootPath="~/EPiServer/"> <add name="My.Project"> <assemblies> <add assembly="My.Project" /> </assemblies> </add> <add name="Shell" /> <add name="CMS" /> <add name="EPiServer.Packaging.UI" /> </protectedModules>
I have been look a looking for ways to make a episerver Dashboard widget(not sure this is the rigth word for it) with c# + razor or som simple way.
There are some things in the docs about dashboard view, component and container - but no real explanation about what each of them is and how to use them. Any full samples?
I just need some simple component to export some custom data for users and discounts in episerver. Ofcause that could easily be build with a custom site in the website - but I think that it belong in the episerver backend. What is the simple(and right) way to build dashboard widgets for episerver 10?