当asp.net用户控件加载时,javascript不会触发

时间:2011-03-16 15:47:59

标签: jquery asp.net onload

我试图在ASP.net用户控制到aspx页面时触发Javascript调用 该网站允许用户向页面添加用户控件(类似于向google Widgets等页面添加小部件等)。但是当添加控件时,javascript不会触发,只有刷新页面才会触发javascript。如果下次访问网站并且控件仍然存在,则javascript也会激活。

我是否需要使用RegisterClientScript方法在控件加载或OnPreRender事件上注册调用(setAutoTimer())。

在用户控件中,我在ascx文件的开头有这个:

<script language="javascript" type="text/javascript">
    $(document).ready(function () {
        if ($("#alarmList").length) {
            setAutoTimer();
            getData();
       }
    });

    function setAutoTimer() {
        setInterval(getData, 10000);
    }

    function getData() {
        $.ajax({
            type: "POST",
            url: "Service.asmx/getListData
            data: "{'inverterid': '" + "1'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (msg) {
                AjaxSucceeded(msg);
            },
            error: AjaxFailed
        });
    }

    function AjaxSucceeded(result) {
        $("#alarmList").empty();

        $("#alarmsListTemplate").tmpl(result.d)
        .appendTo("#alarmList");
    }

    function AjaxFailed(result) {
        alert(result.status + ' ' + result.statusText);
    }
</script>

2 个答案:

答案 0 :(得分:4)

$(document).ready(function(){});只会在完全回发后(重新加载DOM时)运行。我假设您通过另一个AJAX方法添加控件(在这种情况下document.ready将不会触发。您可以使用AJAX框架事件pageLoad(sender,args),它将在回调和回发后触发。您可以像使用它一样使用它所以...

function pageLoad(sender, args) {
        if (args.get_isPartialLoad()) {
            setAutoTimer();
            getData();
        }
    }

答案 1 :(得分:0)

您可以从将页面添加到页面的javascript中调用该方法。

e.g。

function AjaxSucceeded(result) {
    $("#alarmList").empty();

    $("#alarmsListTemplate").tmpl(result.d)
    .appendTo("#alarmList");

    setAutoTimer();
}