1

n2cms を使い始めたばかりですが、この問題が設定方法にあるのか、asp.net MVC と PartialViews にあるのかわかりません。

NuGet n2cms パッケージと n2cms razor サポート パッケージを使用していますが、n2cms Dinamico パッケージは使用していません。

ビューに DTO を渡すと、ビューのレンダリングに関して次のエラーが表示されます。

ディクショナリに渡されたモデル アイテムは「Castle.Proxies.WhatsNewItemProxy」タイプですが、このディクショナリには「Simpletons.Models.WhatsNewDTO」タイプのモデル アイテムが必要です

n2cms コードプレックスに関する私の投稿へのリンクは、n2cms、ベース モデルおよびコントローラーのコードをどのように使用しているかを説明しています: https://n2cms.codeplex.com/discussions/453163

私は ContentPage を持っています: WhatsNewPage

[PageDefinition("Whats New Page", IconUrl = "~/N2/Resources/icons/page_world.png")]
[WithEditableTitle]
[WithEditableName]
public class WhatsNewPage : PageModelBase
{
    public virtual IEnumerable<WhatsNewItem> GetWhatsNewItems()
    {
        return Find.CurrentPage.Children.Cast<WhatsNewItem>();
    }
}

WhatsNewPage のコントローラーがあります: WhatsNewPageController

[Controls(typeof(WhatsNewPage))]
public class WhatsNewPageController : ContentController<WhatsNewPage>
{
    public override ActionResult Index()
    {
        var items = CurrentItem.GetWhatsNewItems();
        return View("Index", new WhatsNewDTO
        {
            Title = CurrentItem.Title,
            WhatsNewItems = items
        });
    }
}

ビューモデル: WhatsNewDTO

public class WhatsNewDTO
{
    public string Title { get; set; }
    public IEnumerable<WhatsNewItem> WhatsNewItems { get; set; }
}

ContentPage ビュー: Views/WhatsNewPage/ Index.cshtml

@model Simpletons.Models.WhatsNewDTO

<div class="span12">
    <h2>@Model.Title</h2>
    @{Html.DroppableZone("WhatsNew").Render();}
</div>

WhatsNewPage 内には、WhatsNewItems をドラッグ/ドロップできる DroppableZone があります。

新着情報

[PartDefinition("WhatsNewItem", IconUrl = "~/N2/Resources/icons/layout.png")]
public class WhatsNewItem : ContentPart
{
    public override string TemplateKey
    {
        get
        {
            return "WhatsNew";
        }
    }

    [EditableText("Brand", 100)]
    public virtual string Brand { get; set; }

    [EditableText(Title = "Heading", SortOrder = 200)]
    public virtual string Heading { get; set; }

    [EditableText(Title = "Heading date", SortOrder = 300)]
    public virtual string HeadingDate { get; set; }

    [EditableImage("What's new image", 400)]
    public virtual string Image { get; set; }

    [EditableText("Image caption", 500)]
    public virtual string ImageCaption { get; set; }

    [EditableFreeTextArea("What's new text", 600)]
    public virtual string Text { get; set; }
}

WhatsNewItem のコントローラー: ContentPartController

[Controls(typeof(ContentPart))]
public class ContentPartController : ContentController<ContentPart>
{
    public override ActionResult Index()
    {
        return PartialView(CurrentItem.TemplateKey, CurrentItem);
    }

}

WhatsNewItem のビュー: Views/Shared/ WhatsNew.cshtml

@model Simpletons.Models.WhatsNewDTO

@foreach (var detail in @Model.WhatsNewItems)
{
    <div class="whatsnew-detail clearfix">
        <img src="@detail.Image" class="whatsnew-image pull-left"/>
        <p class="whatsnew-heading">
            @detail.Heading
        </p>
        <p class="whatsnew-date">
            @detail.HeadingDate
        </p>
        <p class="whatsnew-text">
            @detail.Text.ToHtmlString()
        </p>
    </div>
    <hr/>
}
4

0 に答える 0