我有以下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方法?
提前致谢。
答案 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;