【问题标题】:How to submit aspx page value to Tridion RTF如何将 aspx 页面值提交到 Tridion RTF
【发布时间】:2012-08-08 06:33:08
【问题描述】:

我正在创建 Tridion GUI 扩展,在此我在功能区工具栏中创建了一个按钮(“InsertCP”)。 场景是:

1.用户从组件的富文本框中选择任意文本
2.用户单击功能区工具栏中的“InsertCP”按钮。
3.当用户单击按钮时,我正在打开我的自定义 aspx 页面。
4.在自定义aspx页面中,用户可以选择“组件”和“组件模板”。
5.我将选定的组件和组件模板 tcm id 存储在一个变量中。
6.我在自定义aspx页面中有提交按钮。
7.当用户单击提交按钮时,我需要在富文本框源中将所选文本格式化如下。

例如:

<a href="componentid=tcm-00-000, componenttemplateid="tcm-00-000-00">Selected Text</a>

我已经完成了第 6 步,我正在尝试第 7 步,当我单击提交按钮时无法提交所选 ID。

我的 ASPX 页面:

<html xmlns="http://www.w3.org/1999/xhtml"     xmlns:c="http://www.sdltridion.com/web/ui/controls"> 
<head runat="server">
<title></title>
<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> 
</head>

<div>
    <asp:TextBox ID="txttags" runat="server" Width="800px"      ></asp:TextBox>       
    <asp:Button ID="btnsubmit" runat="server" Text="Submit"     onclick="btnsubmit_Click"  /> 

         <c:button id="InsertButton" runat="server" class="customButton greybutton" label="Insert" />         
</div>

cs代码:

protected void btnsubmit_Click(object sender, EventArgs e)
    {
txttags.Text = "anyvalue.";
}

和java脚本一样退出一个.. 但我在运行时遇到错误。是否需要在 cs 页面中添加任何命名空间。

我的 CS 页面会有很多像下面这样的事件。我不能在这个页面上使用 tridion 控制按钮吗?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Tridion.ContentManager.CoreService.Client;
using System.Xml.Linq;
using System.Xml;


namespace Somename
{

public partial class Classname
{

    protected void Page_Load(object sender, EventArgs e)
    {

    }


    protected void ddSelectOption_SelectedIndexChanged(object sender, EventArgs e)
    {



    }


    protected void lbPublication_SelectedIndexChanged(object sender, EventArgs e)
    {

    }


    protected void lbPubFolders_SelectedIndexChanged(object sender, EventArgs e)
    {


    }


    protected void lbComponent_SelectedIndexChanged(object sender, EventArgs e)
    {

    }


    protected void lbComponentTemplate_SelectedIndexChanged(object sender, EventArgs e)
    {

    }

【问题讨论】:

  • 你选择的文本的例子有点不清楚,也许你可以在里面放更多的细节,具体需要做什么?
  • 我需要像我展示的那样创建一个标签。请查看更新的问题

标签: tridion tridion-2011


【解决方案1】:

我将为您更新的问题提供第二个答案,尽管您仍然让我们有点不知所措,因为您只提到您遇到了运行时错误,而不是具体是什么(我不可能提供如果我不知道你得到什么错误,这是一个很好的答案)。

您的 ASPX 页面应如下所示:

<%@ Page Language="C#" AutoEventWireup="true" Inherits="Example.MyPopup" ClassName="MyPopup" %>
<%@ Import Namespace="Tridion.Web.UI" %>
<%@ Register TagPrefix="ui" Namespace="Tridion.Web.UI.Editors.CME.Controls" Assembly="Tridion.Web.UI.Editors.CME" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html id="MyPopup" class="tridion popup" xmlns:c="http://www.sdltridion.com/web/ui/controls" xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>My Popup Example</title>
        <cc:TridionManager runat="server" Editor="ExampleEditor" IsStandAloneView="false">
            <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>
    </head>
    <body>
        <table id="tblHeight" border="0" cellpadding="0" cellspacing="0">
            <tr>
                <td id="InputField" valign="top">
                    <table>
                        <tr>
                            <td id="NameLabelCell" nowrap="nowrap">My Label</td>
                            <td><input id="txttags" name="txttags" value="" tabindex="1" /></td>
                        </tr>
                    </table>
                </td>
            </tr>
            <tr id="FooterRow">
                <td class="footer" align="right">
                    <div class="BtnWrapper">
                        <c:Button ID="BtnOk" runat="server" TabIndex="2" Label="<%$ Resources: Tridion.Web.UI.Strings, OK %>" />
                        <c:Button ID="BtnCancel" runat="server" TabIndex="3" Label="<%$ Resources: Tridion.Web.UI.Strings, Cancel %>" />
                    </div>
                </td>
            </tr>
        </table>
    </body>
</html>

注意:表格标记是直接从 Anchor 弹出窗口中复制的,您可以随意使用 div 并以任何您想要的方式设置样式,该示例旨在向您展示如何重用现有的 Tridion 控件 你的 CS 会变成:

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 Example
{
    [ControlResources("Example.MyPopup")]
    public class MyPopup : PopupView
    {
    }
}

它不包含任何内容,也不需要,因为您将在 JavaScript 中执行所有操作,如前所述。

【讨论】:

  • 正如你所说,我不能在我的 CS 页面中做任何事情。但巴特我在我的 CS 页面中有很多活动。正如我在我的问题中更新的那样。不知何故,我可以将此 CS 页面与 tridion 控制按钮一起使用。我的 aspx 页面与您的演示 aspx 页面相似。
  • 不,您不能将 CS 中的代码与 Tridion 按钮控件一起使用,并且由于您需要 Tridion 按钮控件,因为您想要回发信息,您应该在 JavaScript 中重写您的代码,即SDL Tridion UI 扩展的工作方式
  • 感谢 bart 提供此信息,从两天开始我就走错了方向。意味着我需要使用 javascript 中的所有内容再次统计它。
【解决方案2】:

查看您的更新,我收集到您想要的是根据您的 ASPX 页面中的信息创建一个锚元素到组件的富文本字段的选定文本中。

要构建类似的东西,您最好看看可用的类似东西。我能想到的最简单的示例是“格式”功能区工具栏中的“超链接”按钮。这包括两个项目:

  1. ..\Tridion\WebUI\Editors\CME\Views\Popups\Link\Link.aspx
  2. ..\Tridion\WebUI\Editors\CME\Views\Popups\Link\Link.js

所有的魔法都发生在 JavaScript 文件中(通常在这些 UI 扩展中完成)。在initialize() 方法中,选择的部分是这样提取的:

var p = this.properties;
var c = p.controls;

// Get selected acronym
p.OldLink = (window.dialogArguments && window.dialogArguments.link) ? window.dialogArguments.link : {};

返回到富文本字段是在_onOkButtonClicked(event) 方法中完成的,如下所示:

this._buildNewLinkHtml();
this.fireEvent("submit", { link: this.properties.NewLink });
window.close();

您可以仔细查看 Link.js 文件中的其余代码并重新构建它以满足您的需要。

顺便说一下,看看你想在href中发回的信息,我想说如果你根据某种标准对其进行格式化会更容易,例如你可以像JSON一样将你的URI放在那里:

<a href="{'component'='tcm:1-23','componenttemplate'='tcm:1-45-32'}">text</a>

或者甚至可能滥用组件模板 URI 的标题属性:

<a href="tcm:1-23" title="tcm:1-45-32">text</a>

因为我假设您的组件模板代码将使用这些值对这个超链接结构做一些特殊的事情。

编辑

您在添加的图像中显示的 无法识别的标记前缀 c 错误,您可以通过添加正确的命名空间引用来解决,正如我在 answer here 中指出的那样。所以只需将它添加到您的 HTML 元素中:

<html xmlns:c="http://www.sdltridion.com/web/ui/controls" xmlns="http://www.w3.org/1999/xhtml"> 

至于 无法识别的 cc 标记前缀,您不必担心那个,它似乎在运行时就可以解决,因为您在 Tridion 上下文中运行它。 p>

【讨论】:

  • 这很有帮助,但我卡在一个地方,如何使用我的提交按钮将我在 aspx 页面中的选择提交到 RTF。在现有选项中,他们使用 Tridion 控制按钮。所以在我的情况下,我的页面上没有任何 tridion 控制按钮。如果我想创建一个它不允许我。请帮助
  • UI 通过 JavaScript 框架运行,因此您必须使用 Tridion 控制按钮,或者您必须自己找到将按钮与 JavaScript 挂钩的方法。
  • 我的问题类似于 [stackoverflow.com/questions/9890099/… 。我按照您的步骤进行操作,但我遇到了错误。如何将我的 asp 按钮用作 tridion 控制按钮。
  • ok 意味着我需要遵循相同的步骤。但我怎样才能消除我发出的错误:不支持依赖项。
  • 您无法将自己的控件连接到 JavaScript,只需使用 c:Button 就像在 Link.aspx 中所做的那样,我已经更新了我的其他答案以包含有关您如何使用的更多信息可以在您的 JavaScript 中使用 Tridion 控件。至于你的错误,我不知道你有什么代码,所以我无法解决(我的水晶球目前没有为我提供答案;o)
猜你喜欢
  • 2012-04-18
  • 2011-09-10
  • 1970-01-01
  • 2010-12-01
  • 2014-06-21
  • 1970-01-01
  • 2012-04-18
  • 2017-07-05
  • 1970-01-01
相关资源
最近更新 更多