2013-02-18 68 views
2

我對Web開發相對比較陌生,對ASP.NET Web窗體也是全新的。 我有以下的用戶控件:在asp.net中獲取可編輯div的內部html

CSS:

div.textareaDiv { 
    -moz-appearance: textfield-multiline; 
    -webkit-appearance: textarea; 
    border: 1px solid gray; 
    font: medium -moz-fixed; 
    font: -webkit-small-control; 
    height: 200px; 
    padding: 2px; 
    resize:both; 
    width: 400px; 
    word-wrap: break-word; 
    word-break:normal; 
} 

腳本:

function CatchEnterKey(e) { 
     if (e.keyCode == 13) { 
     e.stopPropagation(); 
     return false; 
    } 
    return true; 
} 

標記:

<div id='HtmlTextField' style="height:200px!important;" class="textareaDiv"  onkeypress="CatchEnterKey(event);" contenteditable="true" unselectable="off" runat="server"></div>; 

而下面的代碼隱藏功能被調用,當在父頁面上的「提交」按鈕是 按下:

public string GetHtml() 
     { 
      Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "gethtml", "alert($('.textareaDiv').html());", true); 
       return null; 
     } 

想法是通過腳本執行返回div的內部html,但目前我只想弄清楚,爲什麼我得到空警報。難道div的內部html在回發時真的被清空了,我需要考慮一個不同的解決方案,或者我做錯了什麼?

在此先感謝

羅馬

回答

1

看到這個post on SO。改用你的例子來改用RegisterStartupScript。問題是RegisterClientScriptBlock在元素呈現到屏幕之前進行註冊,因此在運行代碼時甚至不會呈現該元素。 RegisterStartupScript在所有元素之後呈現。

此外,JQuery還支持延遲運行腳本,直到加載完所有內容爲止。

$(document).ready(function() { /* alert code here */ }); 

或者簡寫:如果你包裝你的代碼

$(function() { /* alert code here */ }); 

這會延遲執行,直到文件準備好。這是另一種選擇。

+0

謝謝,這真的是推遲執行的工作,但還有另一個問題:既然div中的文本已經被編輯了,而且我想要更新的值,我就得到了初始值。我想,我必須更早地將它保存到一些隱藏的控件或視圖狀態:在某些特定事件上... – user2082616 2013-02-18 14:20:05

+0

您是否在回發到服務器時表示意見? – 2013-02-18 14:28:14

+0

@ user2082616我以爲你必須將它保存到一個隱藏的控件中* *,即在回發之前。 – 2013-02-18 15:01:06