在异步回发上注册javascript

时间:2012-04-03 20:49:28

标签: javascript jquery asp.net asynchronous-postback

我在UpdatePanel中包含一个asp.net按钮,当点击它时会执行异步回发并注册一些显示jquery对话框的javascript。

protected void btnAddData(object sender, EventArgs e) {
    StringBuilder jqueryDialog = new StringBuilder();
    jqueryDialog.Append("$(document).ready(function() {");
    jqueryDialog.Append("RefreshData();");
    jqueryDialog.Append("$('#divData').dialog({ modal: false, draggable: true, title: 'Historical Data', width: 700 });");
    jqueryDialog.Append("});");

    ScriptManager sm = ScriptManager.GetCurrent(this);
    if (sm != null && sm.IsInAsyncPostBack) {
        ScriptManager.RegisterClientScriptBlock(
            this, typeof(Page), Guid.NewGuid().ToString(),
            jqueryDialog.ToString(), true);
    }
}

正如你所看到的,javascript首先调用一个名为RefreshData()的函数,该函数在我的标记中存在为javascript。

<script type="text/javascript" language="javascript">
    if ($) {
        $(document).ready(function () {
            function RefreshData() {
                alert("Data Refreshed!");
            }
        });
    }
</script>

但是,Firefox发出错误消息,指出 RefreshData未定义。这是否意味着我在异步回发上注册的任何javascript将无法使用 我在标记中定义的javascript函数?

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

不要在document.ready函数中定义RefreshData函数,这是一个匿名回调函数。在外面定义它以便外部可以访问:

<script type="text/javascript">
    if (typeof($) != 'undefined') {
        function RefreshData() {
            alert("Data Refreshed!");
        }
    }
</script>

此外,您可能不需要包装文档。您的服务器端包括:

StringBuilder jqueryDialog = new StringBuilder();
jqueryDialog.Append("RefreshData();");
jqueryDialog.Append("$('#divData').dialog({ modal: false, draggable: true, title: 'Historical Data', width: 700 });");