N2 для MVC - как заставить работать Зоны? - PullRequest
3 голосов
/ 03 октября 2010

Я смотрю на N2 CMS Минимальный пример для MVC (из здесь )

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

Как заставить работать Зоны и Части в минимальном примере?

Команда Html.Zone() не работает "из коробки".

1 Ответ

12 голосов
/ 04 октября 2010

С небольшой помощью libardo на форуме N2

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

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

<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) Добавить контроллер для детали. Это обычный контроллер N2, за исключением того, что мы переопределяем Index для возврата 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.

...