2010-10-03 4 views
3

Я смотрю на N2 CMS минимальный примере для MVC (от here)N2 для MVC - как заставить зоны работать?

Я понял, большинство из них, но я вижу, что N2 поддерживает «Часть», которые вы можете поместить в «зону».

Как получить зоны и детали, работающие в минимальном примере?

Html.Zone() команда, похоже, не работает из коробки.

ответ

12

С оказала помощь libardo at the N2 forum

Вот «минимальный» способ добавления зон и части к минимальному Примеру N2 для MVC:

1) Добавить это пространство имен в web.config страницах. Пространства имен узла:

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

2) Добавить модель Container страницы, используя 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) Добавить модель детали, например это просто показывает Title как строку. Обратите внимание, что 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) Добавить контроллер для части. Это обычный N2 контроллер за исключением того, что мы переопределять индекс для возврата PartialView:

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 страниц.