用于在HTMLEditor控件中插入HTML文本的C#等效代码

时间:2013-12-19 15:35:50

标签: javascript asp.net

我有以下javascript代码,用于在当前光标位置插入html文本。

function insertTextInHTMLEditorAtCursor() {

        var editorControl = document.getElementById("Editor1");
        var editPanel = editorControl.control.get_editPanel();
        if (editPanel.get_activeMode() == 0) {
            var designPanel = editPanel.get_activePanel(); // Achievable till here
            designPanel.insertHTML("Additional text"); // C# equivalent?                
        }
    }

上面的代码使用Javascript完美地完成了工作。

但是,我的要求是使用后面的代码(而不是使用JS)来实现相同的功能。

到目前为止,我实现了使用Reflection编写C#等效代码,直到注释“Achievable until here”。下面是C#代码:

        PropertyInfo piEditPanel = this.testEditor.GetType().GetProperty(
                                               "EditPanel", 
                                                System.Reflection.BindingFlags.NonPublic | 
                                                System.Reflection.BindingFlags.Static | 
                                                System.Reflection.BindingFlags.Instance);

        var editPanel = piEditPanel.GetValue(this.testEditor, null);
        PropertyInfo piActiveMode = piEditPanel.PropertyType.GetProperty("ActiveMode");
        dynamic designMode = piActiveMode.GetValue(editPanel, null);   

        FieldInfo fiModelPanel = piEditPanel.PropertyType.GetField("ModePanels", 
                                                                    BindingFlags.Static | 
                                                                    BindingFlags.NonPublic | 
                                                                    BindingFlags.Instance);

        dynamic modePanels = fiModelPanel.GetValue(editPanel);
        var designModel = modePanels[0]; // I get the DesignPanel

我被困在下一行 - 因为insertHTML方法没有在任何.cs文件中定义(我下载了AJAX Control toolkit源代码来检查这一点)。它被定义为DesignPanel.pre.js文件中的Javascript函数。

我的问题:有没有办法可以“以某种方式”调用insertHTML方法?

提前致谢。

2 个答案:

答案 0 :(得分:0)

没有必要反思。你试着在这里做一件简单的事,但你的尝试过于复杂了。您需要从代码中执行的操作是将HTMLEditor的.Content属性设置为包含HTML标记的字符串。

protected void Page_Load(object sender, EventArgs e)
   {
   if(!IsPostBack)
      {
      string MyHtml=GetMyHtmlFromDatabaseOrSomewhere();
      MyHTMLTextEditor.Content=MyHtml;
   }
}

答案 1 :(得分:0)

我的建议是使用隐藏字段来存储光标的位置,使用javascript然后在服务器端代码 a)使用 substring for editor.content 从0索引开始,从隐藏字段到该值的长度, b)将您的文字附加到步骤a的结果

    //hf_cursor_position is id of hiddenfield 
    //where you would store value of current position of cursor 
    //using javascript
    int cursor_position = 0;
    int.tryParse(hf_cursor_position.value, out cursor_position);

    editor1.content = editor1.Content.Substring(0, (cursor_position + 1)) + your_text;