自定义区域中的食人鱼CMS图像扩展

时间:2013-09-20 18:32:49

标签: c# asp.net-mvc piranha-cms

我创建了一个自定义区域,现在我想为它添加一个图像。

如何将Image选择器实现到此自定义区域?

我看到了一个示例here,它向您展示了如何对核心扩展进行此操作,但我似乎无法使用自定义区域。

public class AccordionItem
{
    public string Title { get; set; }
    public string Body { get; set; }
}

[Export(typeof(IExtension))]
[ExportMetadata("InternalId", "AccordionRegions")]
[ExportMetadata("Name", "Accordion")]
[ExportMetadata("ResourceType", typeof(Piranha.Resources.Extensions))]
[ExportMetadata("Type", ExtensionType.Region)]
[Serializable]
public class AccordionRegion : Extension
{
    [Display(Name = "Title")]
    public string Title { get; set; }

    public IList<AccordionItem> Items { get; set; }

    public AccordionRegion()
    {
        Items = new List<AccordionItem>();
    }
}

1 个答案:

答案 0 :(得分:1)

我查看了你的代码,发现了一个非常简单的解决方案,可以将图像合并到你的SlideItems中。但首先是另一件事。

[ExportMetadata("ResourceType", typeof(Piranha.Resources.Extensions))]

如果您要获取在名称元字段中输入的密钥以启用基于文化的不同语言,则此元数据字段有效。由于核心中没有关键的手风琴,因此至少对我而言,它会让它变得混乱。

现在进入图像。为了使其正常工作,我只需将滑块项修改为以下内容:

public class AccordionItem
{
    public string Title { get; set; }
    public string Body { get; set; }
    public ImageRegion Image { get ; set ; }

    public AccordionItem() {
        Image = new ImageRegion() ;
    }
}

这样我们就可以重用核心项目中可用的ImageRegion标准功能。由于你没有提供你的观点的源代码,我就像这样嘲笑它们。

<强> AccordionRegion.cshtml

@model AccordionRegion

<ul class="form">
    <li>@Html.LabelFor(m => m.Title)
        <div class="input">@Html.TextBoxFor(m => m.Title)</div>
    </li>
</ul>
@Html.EditorFor(m => m.Items)

<强> EditorTemplates / AccordionItem.cshtml

@model AccordionItem

<fieldset>
    <legend>An item</legend>
    <ul class="form">
        <li>@Html.LabelFor(m => m.Title)
            <div class="input">@Html.TextBoxFor(m => m.Title)</div>
        </li>
        <li>@Html.LabelFor(m => m.Body)
            <div class="input">@Html.TextAreaFor(m => m.Body)</div>
        </li>
    </ul>
    @Html.PartialFor("ImageRegion", m => m.Image)
</fieldset>

由于ImageRegion呈现了相当多的HTML,我会实现某种服务器端代码,生成一个新的AccordionItem并使用AJAX将其发送回客户端,而不是在视图中硬编码大量HTML / JS内容。