Orchard自定义模块显示空白的“创建”页面

时间:2012-03-31 02:41:14

标签: asp.net asp.net-mvc-3 module orchardcms

我在this wonderful guide之后为Orchard创建了一个自定义模块。

我创建了一个名为BarberAdminController的控制器,如下所示:

[Admin]
public class BarberAdminController : Controller
{
    ...

    public BarberAdminController(IOrchardServices services, IRepository<BarberPart> repository)
    {
        _repository = repository;
        _services = services;
    }

    ... 

    public ActionResult Create()
    {
        var barber = _services.ContentManager.New(typeof(BarberPart).ToString());

        dynamic model = _services.ContentManager.BuildEditor(barber);

        return View(model);
    } 
}

查看:

@{ Layout.Title = T("New Barber").ToString(); }

@using (Html.BeginFormAntiForgeryPost()) {
    @Html.ValidationSummary()
    // Model is a Shape, calling Display() so that it is rendered using the most specific template for its Shape type
    @Display(Model)
}

点击管理菜单中的链接创建一个理发师后,我得到一个空白页面,只有一个“保存”按钮。 (URL:/ Admin / BarberShop / Barbers / Create)

有谁知道我可能做错了什么?

我已经设置了路线和管理员链接,它们似乎工作正常。我尽可能地按照指南正确地为BarberPart创建驱动程序和处理程序。包括down到Migration.cs文件数据库模式。

任何帮助都会很棒!

1 个答案:

答案 0 :(得分:0)

我明白了。

我需要为BarberPart定义内容部分和内容类型。在Migrations.cs中,执行:

ContentDefinitionManager.AlterPartDefinition(typeof(BarberPart).Name, p => p
            .Attachable(false));
ContentDefinitionManager.AlterTypeDefinition("Barber", t => t
            .WithPart(typeof(BarberPart).Name));

在Controller的“Create”方法中,替换:

var barber = _services.ContentManager.New(typeof(BarberPart).ToString());

使用:

BarberPart barber = _services.ContentManager.New<BarberPart>("Barber");

确保您有一个Drivers / BarberDriver.cs文件:

public class BarberDriver : ContentPartDriver<BarberPart> 
{
    protected override DriverResult Editor(BarberPart part, dynamic shapeHelper)
    {
        return ContentShape("Parts_Barber_Edit", () => shapeHelper.EditorTemplate(TemplateName: "Parts/Barber", Model: part, Prefix: Prefix));
    }

    protected override DriverResult Editor(BarberPart part, IUpdateModel updater, dynamic shapeHelper)
    {
        updater.TryUpdateModel(part, Prefix, null, null);
        return Editor(part, shapeHelper);
    }
}

请确保在/Views/EditorTemplates/Parts/Barber.cshtml中有一个零件编辑模板,如下所示:

@model SDKU.Barbr.Models.BarberPart

<fieldset>
    @Html.EditorFor(model => model.SomePropertyName)
    etc...
</fieldset>