我在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文件数据库模式。
任何帮助都会很棒!
答案 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>