- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在 Orchard CMS 中,我可以使用 Filters.Add(new ActivatingFilter<TermsAndConditionSettingsPart>("Site"));
创建一个部件并将其焊接到站点上并让这部分的编辑器显示在站点设置中。
我的管理屏幕中还有一些页面,我使用了 Controller 和操作来允许用户编辑我的模块的设置。
我想知道如何将零件焊接到我的自定义管理页面之一。我想我需要做一些与上面提到的代码类似的事情,但我不太确定我应该焊接什么(即 - 我应该用什么替换“Site”)?我是否需要为我的每个管理页面创建一个内容类型?
如有任何帮助,我们将不胜感激。
最佳答案
在进一步探索并考虑到@Piotr 的出色回答后,我设法实现了我想做的事情。
第 1 步:迁移
private readonly IOrchardServices _services;
public Migrations(IOrchardServices services) {
_services = services;
}
public int Create()
{
ContentDefinitionManager.AlterTypeDefinition("PlayerSearch", cfg => { });
var content = _services.ContentManager.New("PlayerSearch");
_services.ContentManager.Create(content);
return 1;
}
在上面的示例中,"PlayerSearch"
是我的内容类型的名称(即我将要将我的零件焊接到的项目)。这段代码只是创建了一个 PlayerSearch
类型并创建了它的一个实例,然后将其持久化。
第 2 步:内容部分
我创建了一个简单的 POCO 类作为 ContentPart
。这就是我想要焊接到我的 PlayerSearch 页面的内容:
public class PlayerSearchPart : ContentPart
{
public string String1 { get; set; }
public string String2 { get; set; }
public string String3 { get; set; }
public int Int1 { get; set; }
public int Int2 { get; set; }
public int Int3 { get; set; }
}
第 3 步:ContentHandler
接下来我要做的是将我的 PlayerSearchPart
焊接到我的 PlayerSearch
类型,如迁移中定义的那样:
public class PlayerSearchHandler : ContentHandler
{
public PlayerSearchHandler()
{
Filters.Add(new ActivatingFilter<PlayerSearchPart>("PlayerSearch"));
}
}
我在 ContentHandler 中使用 ActivatingFilter
完成了此操作。
第 4 步: Controller
现在我们需要在管理屏幕中创建一个能够向用户显示所有焊接部件的页面:
private readonly IOrchardServices _services;
public PlayerManagementController(IOrchardServices services) {
_services = services;
}
[HttpGet]
public ActionResult PlayerSearch()
{
var playerSearchType = _services.ContentManager.Query().ForType(new[] {"PlayerSearch"}).Slice(0, 1).FirstOrDefault();
var model = _services.ContentManager.BuildEditor(playerSearchType);
// Casting to avoid invalid (under medium trust) reflection over the protected View method and force a static invocation.
return View((object)model);
}
此操作检索我在迁移文件中创建的 PlayerSearch
类型的实例,为其构建编辑器,然后将其传递给 View 。
第 5 步: View
我们的操作当然需要一个 View ,一旦您知道如何操作,这就非常简单了:
@using (Html.BeginFormAntiForgeryPost()) {
@Html.ValidationSummary()
@Display(Model.Content)
<fieldset>
<button class="primaryAction" type="submit">@T("Save")</button>
</fieldset>
}
第 6 步:驱动程序
这里没有异常:
// GET
protected override DriverResult Editor(PlayerSearchPart part, dynamic shapeHelper)
{
return ContentShape("Parts_PlayerSearch_Edit",
() => shapeHelper.EditorTemplate(
TemplateName: "Parts/PlayerSearch",
Model: part,
Prefix: Prefix));
}
// POST
protected override DriverResult Editor(PlayerSearchPart part, IUpdateModel updater, dynamic shapeHelper)
{
updater.TryUpdateModel(part, Prefix, null, null);
return Editor(part, shapeHelper);
}
第 7 步:显示您的部分的编辑器
这里的最后一步是为您的部分创建编辑器模板,并确保您在 placement.info
中有该部分的记录,以便 Orchard 知道在哪里渲染它。
此技术取自网站设置的工作方式。要查看此内容并查看 Post 操作如何工作,请查看 Orchard.Core.Settings.Controllers.AdminController
中的 Controller 。
关于c# - 如何将零件焊接到 Orchard CMS 中的管理页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16841644/
我正在开发一个 voip 调用应用程序。我需要做的是在接到来电时将 Activity 带到前台。我在应用程序中使用 Twilio,并在收到推送消息时开始调用。 问题是我试图在接到任何电话时显示 Act
我是一名优秀的程序员,十分优秀!