3

次のシナリオを検討してください。

MasterpageFile1:

<%@ Master Language="VB" AutoEventWireup="false" CodeBehind="Frame.master.vb" Inherits="Project.Frame" ClientIDMode="Static" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server" name="form1">
        <asp:ContentPlaceHolder ID="BodyPlaceHolder" runat="server">
        </asp:ContentPlaceHolder>
    </form>
</body>
</html>

ネストされたマスターページファイル:

<%@ Master Language="VB" MasterPageFile="/Project/Code/MasterPages/Frame.Master" CodeBehind="Master2.master.vb" Inherits="Project.Master2" %>
<asp:Content ID="Content2" ContentPlaceHolderID="BodyPlaceHolder" runat="server">
    <input type="submit" id="btSubmit" runat="server" value="start" class="input" />
    <asp:UpdatePanel ID="up" runat="server" UpdateMode="Always">
        <ContentTemplate>
            <div>CALCULATION RESULT GETS DISPLAYED HERE</div>
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="btSubmit" />
        </Triggers>
    </asp:UpdatePanel>
    <ajaxToolkit:UpdatePanelAnimationExtender ID="upae" runat="server" TargetControlID="up">
        <Animations>
            <OnUpdating>
                <Sequence>
                    <ScriptAction FPS="20" Duration="0.5" script="DoSomething();" />
                </Sequence>
            </OnUpdating>
            <OnUpdated>
                <Parallel>
                    <ScriptAction FPS="20" Duration="0" script="DoSomethingElse();" />
                </Parallel>
            </OnUpdated>
        </Animations>
    </ajaxToolkit:UpdatePanelAnimationExtender>
</asp:Content>

いくつかのスタイルをロードするASPXページ。

そして、次のjQueryコード:

$(document).ready(function () {
    $("#btSubmit").click();
});

このコードは、UpdatePanelをトリガーして更新します。OnUpdatingアニメーションが再生されている間、サーバーはいくつかの計算処理を実行し、結果をクライアントに送信します。クライアントは結果を組み込みますが、OnUpdatedAnimationは再生されません。

jQueryコードを次のように変更すると、正常に機能します。

$(document).ready(function () {
    setTimeout(function () {
        $("#btSubmit").click();
    }, 1500);
});

誰かが私に、なぜこれが起こるのか、そしてどのように達成するのか、計算はDOMの準備ができたときに開始され、1.5秒後ではないことを教えてもらえますか?

よろしく、Sören

4

1 に答える 1

0

このような動作の理由は、btSubmitクリック時に部分的なポストバックが発生したときに、すべてのクライアント オブジェクトが初期化されるわけではないためだと思います。

このスクリプトを使用してみてください(ScriptManagerコントロールの後に配置してください):

Sys.Application.add_load(applicationLoadHandler);

function applicationLoadHandler(sender, args) {
     if (args.get_isPartialLoad() !== true) {
          $("#btSubmit").click();
     }
}
于 2012-08-22T10:09:10.873 に答える