2010-10-03 17 views
3

Je regarde l'exemple N2 CMS minimal pour MVC (de here)N2 pour MVC - comment faire fonctionner les zones?

J'ai compris la plus grande partie, mais je vois que les parties de «N2 supports que vous pouvez déposer dans « Zones ».

Comment obtenir des zones et des pièces fonctionnant dans l'exemple minimal? La commande Html.Zone() ne semble pas fonctionner correctement.

Répondre

12

Avec un peu d'aide de libardo at the N2 forum

est ici la manière 'minimale' d'ajouter des zones et des parties au N2 minimal Exemple MVC:

1) Ajouter cet espace de noms dans les pages web.config. noeud namespaces:

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

2) Ajouter un modèle de page conteneur, en utilisant les attributs AvailableZones:

using N2.Integrity; 
... 

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

3) Ajouter contrôleur conteneur dans le besoin d'habitude de manière N2, rien de spécial ici pour faire un conteneur:

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

4) Dans la vue du conteneur, utilisez la fonction Html.DroppableZone:

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

5) Ajouter un modèle de pièce, par ex. celui-ci montre juste le titre comme une chaîne. Notez que PartDefinition est ce qui en fait une partie qui peut être déposé dans une zone:

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) Ajouter un contrôleur pour la partie. Ceci est le contrôleur habituelle N2, sauf que nous remplaçons Index pour retourner un 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) Enfin, ajoutez une vue partielle pour le contrôleur de partie. Rien est nécessaire de procéder ici:

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

Dans l'éditeur N2 vous pouvez déposer autant de SimpleParts que vous le souhaitez dans les pages ContainerPage.