我有两个类似的问题,我怀疑它们有一个共同的解决方案。
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)同样,我希望能够有条件地将不同的部分附加到不同的内容项目。例如,我希望分类法中只有第一级父条款才能包含某些字段,而子条款则包含其他字段。
我目前能够处理这个问题的最好方法是创建一个包含所有字段的Part,并在其Driver方法中对上面的那个进行类似的检查,以根据容器返回不同的模型。然后在模板View中检查要渲染的字段:
@if (Model.ThisField != null) {
<div>@Html.EditorFor(m => m.ThisField)</div>
}
else {
<div>@Html.EditorFor(m => m.ThatField)</div>
}
理想情况下,我想创建一个可附加的部件,当它连接到Type时,能够将几个不可连接的辅助部件添加到现有的内容部件,并在创建时添加到新的内容部件或者更新。有没有一种无痛的方法可以做到这一点?我认为&#39;焊接&#39;可能是我需要的,但我还没有能够找到任何可以向我解释焊接的文档或教程,就像我五岁那样。