2017-08-01 101 views
0

我花了数小时试图让自定义树显示在umbraco的自定义部分。 - 没有成功。自定义部分和自定义树MVC方法

到目前为止,我已经设法创建了一个新的部分,但是当我单击该部分时没有任何反应。

应该发生的事情是自定义树应该与一个节点一起显示。当你点击该节点时,它应该显示一个MVC视图。

这是我迄今为止所做的,它基于本教程。

http://www.jondjones.com/learn-umbraco-cms/umbraco-developers-guide/customising-umbraco-ui/how-to-display-an-mvc-view-in-the-umbraco-backend

A.创建部

{ 
    [Application("rewards", "Rewards", "icon-gift", 15)] 
    public class RewardsSection: IApplication 
    { 
    } 
} 

B.创建树

[Tree("rewards", "rewardsTree", "Rewards")] 
[PluginController("Rewards")] 
public class RewardsTree : BaseTree 
{ 
    public RewardsTree(string application) 
     : base(application) 
    { } 

    protected override void CreateRootNode(ref XmlTreeNode rootNode) 
    { 
     rootNode.NodeType = "rewards"; 
     rootNode.NodeID = "-1"; 
     rootNode.Menu = new List<IAction> { ActionRefresh.Instance }; 

    } 

    public override void Render(ref XmlTree tree) 
    { 
     var IndexNode = XmlTreeNode.Create(this); 
     IndexNode.NodeID = "0"; 
     IndexNode.NodeType = "Home"; 
     IndexNode.Text = "Home"; 
     IndexNode.Action = "javascript:openPage('/umbraco/backoffice/Plugins/Rewards/Index');"; 
     IndexNode.Icon = "icon-home"; 
     IndexNode.HasChildren = false; 
     IndexNode.Menu = new List<IAction>(); 
     OnBeforeNodeRender(ref tree, ref IndexNode, EventArgs.Empty); 

     if (IndexNode != null) 
     { 
      tree.Add(IndexNode); 
      OnAfterNodeRender(ref tree, ref IndexNode, EventArgs.Empty); 
     } 
    } 

    public override void RenderJS(ref StringBuilder Javascript) 
    { 
     var js = $"function openPage(url){{UmbClientMgr.contentFrame(url);}}"; 
     Javascript.Append(js); 
    } 

    protected override void CreateAllowedActions(ref List<IAction> actions) 
    { 
     actions.Clear(); 
     actions.Add(ActionNew.Instance); 
     actions.Add(ActionDelete.Instance); 
     actions.Add(ContextMenuSeperator.Instance); 
     actions.Add(ActionRefresh.Instance); 
    } 
} 

C.的RegisterRoutes(称为上ApplicationStarted)

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
    routes.MapRoute(
      name: "Default", 
      url: "umbraco/backoffice/Plugins/{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
    ); 
} 
public class StartUpHandlers : ApplicationEventHandler 
{ 
    protected override void ApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext) 
    { 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
    } 
} 

D.后端控制器 - 返回视图我想查看。

public class RewardsController : UmbracoAuthorizedController 
{ 
    public ActionResult Index() 
    { 
     return View("~/App_Plugins/Rewards/Views/RewardsHome/Index.cshtml"); 
    } 
} 

那么我错过了什么?

我在RewardsTree Class中放置了断点,但没有一个被击中。

我还在Application Started上放置了断点,并且这些断点正在被击中,所以我非常肯定路线配置正确。

有什么,我失踪?我已经看到其他使用树形控制器TreeController的例子,这让我困惑了一下。

任何想法? - 非常卡住

回答

1

我设法得到一个自定义的部分显示自定义树!最后! -

我遇到的问题是两倍。

从所有的在线教程定义自定义树一些教程从BaseTree和其他人继承时引导您如何做到这一点从TreeController继承 -

我已经得到它的工作从TreeController继承,从我了解使用BaseTree是做到这一点的“老方法”。

我正在运行Umbraco 7.6.4程序集:1.0.6396.36621 - 我不确定旧的方式是否可以使用这个版本,但我无法使它工作。

那么下面这本书的第16章中的引导线(自定义栏目,树木和操作)后:https://github.com/kgiszewski/LearnUmbraco7

我得到了我的项目编译和运行,自定义栏目露面,但自定义树没当我点击自定义部分时会抛出错误。

System.NullReferenceException:未将对象引用设置为对象的实例。堆栈跟踪的

部分看起来是这样的:

Umbraco.Web.Trees.ApplicationTreeExtensions.TryLoadFromControllerTree(ApplicationTree appTree,串ID,FormDataCollection的FormCollection,HttpControllerContext controllerContext)在Umbraco.Web.Trees.ApplicationTreeController.d__17.MoveNext ()---从先前的位置堆栈跟踪,其中引发异常的结束 -

这不是显而易见的,为什么这是怎么回事,但有点reasearch后,我计算出这是监守....... .............

我用的是国际奥委会contanier和FO r这工作我需要确保TreeController注册在容器中! - 这是任何有关创建自定义树的文档或教程中都未提及的内容。这些文档假设您使用Umbraco并且不包含IoC容器。

对我来说,我使用Autofac因此,所有我所要做的就是将它添加到我的容器的注册代码:

builder.RegisterApiControllers(typeof(RewardsTreeController).Assembly); 

,突然一切正常!

真的希望这可以帮助别人。 (7.6.4)/ Autofac.Mvc5(4.0.2)/ Autofac.WebApi2(4.0.1)/ < <这就是为我工作的nuget软件包的组合。

+1

YES !!!!!这正是我挣扎着的!我也花了数小时试图找出造成这个错误的原因! – Nicke

+0

:-) - 很高兴我能帮助! –