【问题标题】:Unable to Create New MVC Widget in Kentico 12无法在 Kentico 12 中创建新的 MVC 小部件
【发布时间】:2020-07-19 20:25:12
【问题描述】:

我正在尝试创建一个名为“图像摘要部分”的新小部件。我正处于最初阶段,我只是想在向页面添加小部件时让小部件出现在小部件列表中。相反,我只是得到了我没有创建的现有小部件:

您可以看到我创建了一个实现IWidgetProperties 的类,并且我为此调用了RegisterWidget。我还创建了_ImageSummarySection.cshtml(不过,我不希望小部件出现在小部件选择对话框中是必需的)。

顶层解决方案是针对 MVC 网站,底层解决方案是针对 Kentico CMS。两者都在运行,显示的浏览器是 Kentico CMS(我正在尝试在此屏幕截图中添加我的新小部件,但它不在小部件列表中)。

知道我做错了什么吗? 如何让我的小部件出现在小部件列表中?

附加信息:

.

.

.

.

.

.

编辑:

我刚刚看了这个视频,希望能提供见解:https://www.youtube.com/watch?v=ljQO9on5lLM

它比我预期的更基本,但我确实注意到了这两个框架:

请注意,它显示了六个可供选择的小部件。

然后是这个框架:

它只显示两个可用的小部件。

据此,我推断部分可能具有一些功能,允许开发人员限制其中允许哪些小部件。 为了让我的小部件在默认部分(如下所示)中显示为选项,我可能需要做些什么吗?

.

.

.

.

.

.

编辑 #2:

我对小部件约束进行了一些研究,发现:https://docs.kentico.com/k12/developing-websites/page-builder-development/creating-pages-with-editable-areas-in-mvc

特别是标题为“限制可编辑区域中允许的小部件”的部分,内容如下:

由于我的观点没有传递带有小部件白名单的参数,因此(理论上)应该允许所有小部件:

@* Index.cshtml *@
@using Kentico.PageBuilder.Web.Mvc
@using Kentico.Web.Mvc

<h1>Rhythm Agency</h1>

@Html.Kentico().EditableArea("main")

所以就有了这个理论。我仍然不知道为什么在向页面添加新小部件时我的新小部件没有作为选项出现。

【问题讨论】:

  • 这个问题没有得到很好的回应,所以我创建了一个新的和改进的问题,显示我所做的最新和最大的更改以及我拥有的新信息:stackoverflow.com/questions/62959744/…

标签: kentico kentico-12 kentico-mvc


【解决方案1】:

要识别控制器和小部件,您需要将控制器放在“/Controllers”文件夹中。我的小部件控制器位于“/Controllers/Widgets”文件夹中。

我遇到的问题包括未在类名中添加后缀“Controller”以及小部件控制器不在“/Controllers”文件夹中。

你也没有在一个单独的项目中工作?因为这需要您在“AssemblyInfo.cs”中使用以下内容

using CMS;
[assembly: AssemblyDiscoverable]

并确保您已在您的 kentico 项目中启用页面构建器功能。例如:

protected void Application_Start()
{
    ...

    // Gets the ApplicationBuilder instance
    // Allows you to enable and configure Kentico MVC features
    ApplicationBuilder builder = ApplicationBuilder.Current;

    // Enables the preview feature
    builder.UsePreview();

    // Enables the page builder feature
    builder.UsePageBuilder();

    ...
}

【讨论】:

  • 谢谢!对于那些好奇的人,我的问题是我缺少 AssemblyDiscoverable。控制器位于哪个文件夹/命名空间并不重要(不过,我已经看到一些系统的问题,其中类名中的“控制器”后缀是必需的)。
【解决方案2】:

你快到了。您需要创建另一个类并在 App_Start 文件夹中注册您的小部件。查看上面的documentation here。这是关于小部件注册的部分。也请务必enable Page builder

*** 已更新 ***

根据您的更新并且无法在我的移动设备上很好地看到图像,我能够看到您正在属性模型中定义/注册您的小部件。这需要在 Controller 中完成。请参阅下面的示例。

\Models\Widgets\JobListingWidgetProperties.cs

namespace NameSpace.Models.Widgets.JobListingWidget
{
    public class JobListingWidgetProperties : IWidgetProperties
    {
        // property definitions here
    }
}

\Models\Widgets\JobListingModelView.cs

namespace NameSpace.Models.Widgets.JobListingWidget
{
    public class JobListingWidgetViewModel
    {
        // properties here
    }
}

\Controllers\Widgets\JobListingWidgetController.cs

[assembly: RegisterWidget("NameSpace.Widgets.JobListingWidget", typeof(JobListingWidgetController), "Job Listing Widget", Description = "显示给定路径的作业列表", IconClass = "icon-heartshake")]

namespace NameSpace.Controllers.Widgets
{
    public class JobListingWidgetController : WidgetController<JobListingWidgetProperties>
    {
        public ActionResult Index()
        {
            // code here
        }
    }
}

【讨论】:

  • 恐怕这两个建议都没有帮助。我圈出了屏幕截图的一部分,显示我注册了小部件(它不需要在 App_Start 文件夹中,因为这只是一个约定(注意这是一个 Web 应用程序项目,而不是一个网站项目)。另外,截图显示我正在使用页面构建器,所以它必须已经启用。
  • 查看更新后的答案,看起来您是在属性类中定义/注册小部件,而不是应有的控制器。
  • 控制器是可选的,根据培训和文档以及 Dancing Goat 示例。但是,我创建了一个控制器并重命名了小部件以进行良好的测量(如果“Section”是保留字),但这并没有帮助。
  • 我创建了一个新问题来显示我的更新,以便我们重新开始:stackoverflow.com/questions/62959744/…
  • 好吧,我知道了,是的,控制器是可选的。但是,如果您没有控制器,那么您需要使用单独的类初始化该小部件,正如我在初始响应中提到的那样。虽然将它放在属性类中应该可以工作,但我会遵循 Kentico 的建议。它每次都对我们有用,没有问题。 docs.kentico.com/k12sp/developing-websites/…
猜你喜欢
  • 2020-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-04
  • 1970-01-01
  • 2021-02-09
相关资源
最近更新 更多