2013-12-19 71 views
0

我有下面的JavaScript代碼,用於在當前光標位置插入html文本。在HTMLEditor控件中插入HTML文本的C#等效代碼

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 

我被困在下一以下行 - 是不是在任何的.cs文件的定義insertHTML方法的原因(我下載了AJAX控件工具包的源代碼,以檢查此)。它被定義爲DesignPanel.pre.js文件中的Javascript函數。

我的問題:有沒有一種方法可以「以某種方式」調用insertHTML方法?

在此先感謝。

+0

downvote - 爲什麼? – Ads

+0

-1用於混合C#,HTML,AJAX,JavaScript –

+0

你的建議是什麼呢? – Ads

回答

0

沒有必要反思。你嘗試在這裏做一件簡單的事情,但你的嘗試是過度複雜。你需要從後面的代碼中做的事情是將你的HTMLEditor的.Content屬性設置爲包含你的HTML標記的字符串。

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

HTMLEditor控件的名稱「.Text」沒有屬性。 – Ads

+0

您使用的是TextBox,然後使用AjaxControlToolkit的HTMLEditorExtender嗎?請編輯您的問題並顯示標記,以便我們可以看到您正在做什麼。 – mason

+0

問題標題顯示爲「HTMLEditor」。無論如何,這是一個AjaxControlToolkit.HTMLEditor.Editor控件。 – Ads

0

我的建議將是使用一個hiddenfield存儲光標的位置,使用JavaScript,然後在服務器端代碼 一)使用子串從0索引開始editor.content,具有長度直到從隱藏字段, b)該值附加文本導致步驟的

//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; 
+0

這是一個很酷的想法。如果有一種方法可以使用HTMLEditor控件中的Javascript獲取當前光標位置,我會嘗試着解決它。謝啦。 – Ads

+0

我嘗試過但徒勞無功。在HTMLEditor控件中沒有像selectionStart和selectionEnd這樣的方法。 – Ads

+0

@廣告:[http://stackoverflow.com/questions/8664504/designmode-iframe-get-cursor-position](http://stackoverflow.com/questions/8664504/designmode-iframe-get-cursor-position)此鏈接告訴您如何獲取iframe中的光標位置,因爲htmlEditor使用iframe來呈現其內容。 –