2

我对 Web 开发相对较新,对 ASP.NET Web 窗体完全陌生。我有以下用户控制:

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 回答