Ajax控件工具包HTML编辑器自定义问题?

3

如何更改ACT HTML编辑器的默认设置?我想要加载带有例如选定的粗体按钮或从右到左的方向而不是默认的从左到右的编辑器。
我该怎么做呢? 我已经重写了FillTopToolbar()方法以添加自定义按钮,但我不知道如何更改默认设置。
由于默认的从左到右被选择了,所以我想将其更改为从右到左。

2个回答

5

我编辑了我的答案以更正一些内容

HTMLEditor不提供使用服务器端代码设置这些按钮状态的方法。然而,在客户端上,它通过使用 Sys.Application.load事件 进行初始化。如果您在用户与UI交互之前运行您的代码,但在其初始化程序之后,那么您可以在该事件处理程序中设置任何要设置的属性。

以下是设置加粗按钮和rtl按钮状态所需的代码。如果您想更改其他按钮的状态,则可以从这里开始:

// Attach a handler to the load event.
Sys.Application.add_load(myOnLoadLoader);

function myOnLoadLoader() {
    //This will run JUST after ALL code that was set to run during the load event has run
    window.setTimeout(myOnLoad, 0);
}

function myOnLoad() {
    var editor = $find('<% =editor.ClientID %>');
    var toolbar = editor.get_changingToolbar();
    var toolbarButtons = toolbar.get_buttons();
    for (var i = 0; i < toolbarButtons.length; i++) {
        var toolbarButton = toolbarButtons[i];
        if (toolbarButton instanceof AjaxControlToolkit.HTMLEditor.ToolbarButton.Rtl ||
        toolbarButton instanceof AjaxControlToolkit.HTMLEditor.ToolbarButton.Bold) {
            toolbarButton.set_activeEditPanel(editor.get_editPanel());
            toolbarButton.callMethod();
        }
    }
}

Sys(以及因此Sys.Application)是来自ASP.Net AJAX javascript的命名空间(通过添加到页面的ScriptManager添加的文件)。如果您使用此功能,请确保此行Sys.Application.add_load(myOnLoad);在ASP.Net AJAX文件加载后运行。您可以通过以下几种方式实现:

  1. 将此脚本添加到页面中scriptManager之下。
  2. 将脚本移动到单独的JS文件中,并使用ScriptManager加载它(推荐)。

如果将脚本移动到单独的文件中,您会注意到var editor = $find('<% =youreditor.ClientID %>');不再起作用。这是因为javascript文件不会解析服务器标记并将其替换为服务器端值(与aspx页面不同)。因此,在此处存在问题的部分是<% =youreditor.ClientID %>

要解决这个问题,您需要执行以下操作:

将以下内容添加到aspx标记中(在head部分):

<script language="javascript">
    var myEditorId = '<%= youreditor.ClientID %>';
</script>

所以它看起来像这样:
<head runat="server">
    <script language="javascript">
        var myEditorId = '<%= youreditor.ClientID %>';
    </script>
<title></title>
</head>

(如果您正在使用主页面,只需在页面中的ScriptManager下面添加脚本标记)
在您的JS文件中,将其替换为:
var editor = $find('<% =youreditor.ClientID %>');

使用这个

var editor = $find(myEditorId);

这对于这个问题来说是极度过度的...你只需要设置现有的样式表属性并将你想要的默认样式放在那里即可。按钮已经自动更新了... - Nick Craver
1
@Gabrial McAdams:在你的编辑之后,答案更加合适了。是其他更改使它过度了。我删除了我的回答,因为自动检测功能似乎不在默认的Ajax Toolkit中,似乎在最新版本之前被删除了。你现在的答案很到位,如果他们在4.0发布时重新添加状态检测功能,我会回来更新这个问题。 - Nick Craver
我不确定为什么按钮集合为空。我会调查一下。不过,一个选择是获取缓存的buttonids,按 ';' 分割,然后对于每个id,调用 $find()。这样就可以得到按钮了。 - Gabriel McAdams
我看了一下,发现有些地方不对。在我的脚本运行时,按钮还没有被初始化。如果稍后再运行它(在页面加载后),那么它就可以工作了。我会尝试让它更早地工作。 - Gabriel McAdams
@ Gabriel McAdams:非常非常非常感谢您的时间!根据您耐心的回答,问题已得到妥善解决。如果我通过我的问题打扰了您,请原谅我。我从您那里学到了很多关于客户端的新知识。总之,谢谢您。 - Mehdi
显示剩余14条评论

0

您需要使用CSS来完成此操作,因为编辑器控件不支持本地rtl。以下CSS将设置方向为rtl -

div
{
    direction:rtl;
}

HTML编辑器的默认样式可以在Editor.css文件中找到。


我的整个网页是从右到左的。但是ACT编辑器没有受到影响,因为它依赖于页面样式。我想将方向按钮设置为默认的从右到左。 - Mehdi
您可以在AjaxControlToolkit\HTMLEditor\Editor.css中找到默认的CSS样式。HTMLEditor还有CssClass属性。 - Craig Schwarze
你介意告诉我应该改哪个类名吗?有很多类名,我找不到哪一个是用于更改文本区域样式为RTL的。虽然我不认为这个解决方案会导致在控制工具栏中看到选定的RTL按钮。 - Mehdi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接