2017-08-01 97 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

:-) - 很高興我能幫助! –