2

私はWeb開発に比較的慣れておらず、ASP.NETWebフォームにまったく慣れていません。私は次のユーザーコントロールを持っています:

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がポストバックで実際に空になり、別の解決策を考える必要があるのでしょうか、それとも何か間違ったことをしているのでしょうか?

前もって感謝します

ローマ人

4

1 に答える 1

1

SO に関するこの投稿を参照してください。代わりに RegisterStartupScript を使用するように例を切り替えてください。問題は、要素が画面にレンダリングされる前に RegisterClientScriptBlock が登録されるため、そのコードを実行しても要素がレンダリングされないことです。RegisterStartupScript は、すべての要素の後にレンダリングします。

また、JQuery は、すべてがロードされるまでスクリプトの実行を遅らせることもサポートしています。コードを次のようにラップする場合:

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

または略記:

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

これにより、ドキュメントの準備が整うまで実行が遅延します。それは別の選択肢です。

于 2013-02-18T13:24:41.283 に答える