1

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

如何在这个自定义区域中实现图像选择器?

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

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>();
    }
}
4

1 回答 1

1

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

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

此元数据字段在您想要获取在名称元字段中输入的键以启用基于文化的不同语言时才有效。因为核心中不存在关键的Accordion,所以它搞砸了,至少对我来说是这样。

现在到图像上。为了让它工作,我只是将您的滑块项目修改为以下内容:

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 内容。

于 2013-10-02T06:50:26.810 回答