【问题标题】:How to access Tridion controls in code behind?如何在后面的代码中访问 Tridion 控件?
【发布时间】:2012-04-11 00:25:13
【问题描述】:

我正在自定义 Tridion 功能区工具栏以添加一个按钮。如何在我的 .NET ASPX 页面中访问 Tridion 控件,例如按钮和下拉菜单?

【问题讨论】:

  • 您能否进一步解释一下您的 ASPX 页面需要做什么?它是通过单击功能区中的自定义按钮打开的弹出窗口吗?
  • Bart 在解释如何在弹出窗口中构建基于 Tridion 的视图方面做得非常出色。为了让事情更清楚,您能否分享编辑器配置文件中工具栏按钮的定义以及单击按钮时执行的命令的 JavaScript?

标签: .net user-interface tridion


【解决方案1】:

您的问题对于您到底想要完成什么有点含糊,要向功能区工具栏添加一个按钮,您不需要 ASPX 页面。

但是,如果您的功能区按钮打开一个弹出窗口,您想在其中使用 Tridion 控件,您将必须从导入 Tridion.Web.UI 命名空间开始。

在您的 ASPX 页面中,您可以添加:

<%@ Import Namespace="Tridion.Web.UI" %>
<%@ Register TagPrefix="ui" Namespace="Tridion.Web.UI.Editors.CME.Controls" Assembly="Tridion.Web.UI.Editors.CME" %>

在您的 ASPX 页面的头部,您应该提到 tridion 管理器控件:

<cc:tridionmanager runat="server" editor="ExampleEditor" isstandaloneview="true">
    <dependencies runat="server">       
        <dependency runat="server">Tridion.Web.UI.Editors.CME</dependency>
        <dependency runat="server">Tridion.Web.UI.Editors.CME.Controls</dependency>
    </dependencies>
</cc:tridionmanager>

然后您就可以使用页面中的控件了。一定不要忘记命名空间引用

xmlns:c="http://www.sdltridion.com/web/ui/controls"

您背后的代码应该从 Tridion 视图扩展,例如 Tridion.Web.UI.Editors.CME.Views.Popups.PopupView

using Tridion.Web.UI.Core;
using Tridion.Web.UI.Controls;
using Tridion.Web.UI.Core.Controls;
using Tridion.Web.UI.Editors.CME.Views.Popups;

namespace Extensions.Example.Views
{
    [ControlResources("Extensions.Example.Views.ExampleDialog")]
    [ControlResourcesDependency(typeof(Stack))]
    public class ExampleDialog : PopupView
    {
    }
}

这一切都是可能的,但不确定重用 Tridion 控件的支持级别。据我所知,它们不是公共 API 的一部分,并且任何地方都没有记录任何内容(您可以查看 ..\Tridion\web\WebUI\Editors\CME\Views 目录中的 ASPX 页面,但您没有任何东西背后的代码示例,这些代码基本上都不存在)。因此,如果您想在这里使用 .NET,我实际上会建议您不要重用现有控件和 ASPX 页面中的控件。在这种情况下,只需使用您自己的控件。如果这些控件需要访问 Tridion CMS,您应该让他们为此使用核心服务。

当然可以将 Tridion 控件与 JavaScript API 结合使用,如现有视图所示。如果您在页面上使用c:Button 控件,则可以在 JavaScript 代码中按如下方式访问它:

var p = this.properties;
var c = p.controls;
c.BtnExmpl = $controls.getControl($("#BtnID"), "Tridion.Controls.Button");

// add an event handler like this
$evt.addEventHandler(c.BtnExmpl, "click", this.getDelegate(this._onExmplClicked));

【讨论】:

    【解决方案2】:

    这篇文章可能对你有所帮助http://www.tridiondeveloper.com/ribbon-item-group

    虽然我相信存储在编辑器本身中的任何 ASPX 或 ASCX 的输出都会被缓存,因此创建 CM 功能的首选方法是使用存储在模型中的 JavaScript 和后台服务,您可能需要查看开源 PowerTools 项目以获得更多想法 (http://code.google.com/p/tridion-2011-power-tools/)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-17
      • 2011-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-27
      • 1970-01-01
      • 2014-12-12
      相关资源
      最近更新 更多