2010-10-03 40 views
3

我期待在對MVC的N2 CMS小例子(從hereN2 for MVC - 如何讓區域工作?

我已經想通了大部分,但我看到N2支持的「零件」,你可以拖放到「區域」。

如何獲得區域和零件在最小示例中的工作?

Html.Zone()命令似乎不能立即使用。

回答

12

libardo at the N2 forum

一點幫助這裏的添加區域和零件的N2小例子,對於MVC的「最小」的方式:

1)添加這個命名空間在web.config頁面。命名空間節點:

<pages> 
    <namespaces> 
    ... 
    <add namespace="N2.Web.Mvc.Html"/> 
    ... 

2)添加一個容器頁面模型,使用AvailableZones屬性:

using N2.Integrity; 
... 

[Definition("ContainerPage")] 
[AvailableZone("Right", "MyRightZone")] 
public class ContainerPage : N2.ContentItem 
{ 
    ... 

3)加入容器控制器以常規方式N2,沒有什麼特別需要在這裏,使之成爲容器:

[Controls(typeof(ContainerPage))] 
public class ContainerController : ContentController<ContainerPage> 
{ 
    ... 

4)在容器中的視圖中,使用Html.DroppableZone功能:

<div class="n2zone"> 
    <% Html.DroppableZone("MyRightZone").Render(); %> 
</div> 

5)添加零件模型,例如這個只是將標題顯示爲一個字符串。請注意PartDefinition是什麼使它成爲可以放入區域的零件:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using N2; 
using N2.Details; 

namespace MyProject.Models 
{ 
    [PartDefinition("SimplePart")] 
    [WithEditableTitle("Title", 10)] 
    public class SimplePart : ContentItem 
    { 
     [DisplayableLiteral()] 
     public override string Title 
     { 
      get { return base.Title; } 
      set { base.Title = value; } 
     } 
    } 
} 

6)爲零件添加控制器。這是除了我們覆蓋指數返回PartialView通常N2控制器:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using N2.Web; 
using N2.Web.Mvc; 
using MyProject.Models; 

namespace MyProject.Controllers 
{ 
    [Controls(typeof(SimplePart))] 
    public class SimplePartController : ContentController<SimplePart> 
    { 

     public override ActionResult Index() 
     { 
      return PartialView(CurrentItem); 
     } 

    } 
} 

7)最後,添加一個局部視圖的部分控制。這裏沒有什麼特別的需要:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyProject.Models.SimplePart>" %> 
<div class="simplePart"> 
    <%= Html.DisplayContent(m => m.Title) %> 
</div> 

在N2編輯器中,您可以隨意地將盡可能多的SimpleParts放入ContainerPage頁面。