我有两个类似的问题,我怀疑它们有一个共同的解决方案。
1) 我想创建可附加的自定义部件,但仅限于特定的内容类型,例如只有分类法。如果可以通过迁移开箱即用,例如类似的东西,那将非常酷,.Attachable(cfg => cfg.ToType("Taxonomy"))
但我认为不是。
目前,为了防止我的自定义部件被用于它不打算用于的内容,我只是在驱动程序方法中编写检查:
protected override DriverResult Editor(CustomPart part, dynamic shapeHelper)
{
if (part.ContentItem.ContentType != "Taxonomy") return null;
return ContentShape("Parts_Custom_Edit", ...
}
这是一个很好的方法吗?Handler 会更适合这种逻辑吗?
2) 同样,我希望能够有条件地将不同的部分附加到不同的单个内容项。例如,我只希望分类法中的第一级父术语有一些字段,而子术语有一些其他字段。
我目前能想出的解决这个问题的最好方法是只创建一个包含所有字段的部件,并在其驱动程序方法中运行与上述部件类似的检查,以根据其容器返回不同的模型。然后在模板视图中检查要渲染的字段:
@if (Model.ThisField != null) {
<div>@Html.EditorFor(m => m.ThisField)</div>
}
else {
<div>@Html.EditorFor(m => m.ThatField)</div>
}
理想情况下,我想创建一个可附加部件,当它附加到类型时,它能够将多个不可附加的辅助部件添加到现有内容项,并在创建或更新新内容项时添加它们。有没有一种无痛的方法来做到这一点?我认为“焊接”可能是我需要的,但我找不到任何可以像我五岁一样向我解释焊接的文档或教程。