1

私はこのコードを持っています:

<div style="padding: 0px 12px 12px 12px;">
    <asp:UpdatePanel runat="server" ID="Panel">
        <ContentTemplate>
            <asp:Button ID="btnGenerate" CssClass="button" Style="float: right" runat="server"
                Text="Go" OnClick="btnGenerate_Click" />
        </ContentTemplate>
    </asp:UpdatePanel>
</div>
<div>
    <asp:UpdateProgress runat="server" ID="PageUpdateProgress">
        <ProgressTemplate>
            <img src="ajax-loader.gif" />
            <asp:Label ID="lblStatus" runat="server" Text="Working..." CssClass="label" />
        </ProgressTemplate>
    </asp:UpdateProgress>
</div>

ボタンをクリックすると、アニメーション GIF が表示されます...これは素晴らしいことですが、プロセスに 1 分以上かかるため、(コードが複雑でない限り) 何が起こっているかをユーザーに示したいと思います。

そのため、画像の横にラベルを付け、試してみるとコードビハインドに次のように表示されます。

lblStatus.Text = "Doing xyz";

ある種の名前空間の問題が発生します。これを達成する方法はありますか?

更新: エラーは「型または名前空間 'lblStatus' が見つかりません」です。

4

4 に答える 4

1

動的に変更する場合は、以下のコードを使用してください。

以下のような関数を作成します

function ChangeUpdateProgress(message)
{  
  document.getElementById('lblStatus').innerText=message;
}

OnClickイベントの関数を呼び出す

<asp:LinkButton ID="btnUpdate" runat="server"Text="Update" OnClientClick="ChangeUpdateProgress('Please wait Updating....')" OnClick="btnUpdate_Click"></asp:LinkButton>

<asp:LinkButton ID="btnAdd" runat="server" OnClientClick="ChangeUpdateProgress('Please wait Adding....')" OnClick="btnAdd_Click"></asp:LinkButton>

お役に立てれば..

于 2012-10-25T12:10:46.290 に答える
0

ステータスを表示するには、2 つの異なる AJAX 呼び出しが必要です。

//Changes the HTML like this
<asp:UpdateProgress runat="server" ID="PageUpdateProgress">
    <ProgressTemplate>
        <span id="currentStatu"></span> <img src="ajax-loader.gif" />
    </ProgressTemplate>
</asp:UpdateProgress>

//Javascript
setInterval(jQuery.get(page.aspx?status=1, function () { $("#currentStatu").text(data); } ), 500); // every 0.5 second.

トリッキーな部分は、サーバー側から現在のステータスを取得する方法です。Request["status"] == "1" がこのセッションをテキストとして返すだけで、セッションにそれを保持できる場合は、それが最も簡単な方法です。

一方、DB にクエリを実行して現在のステータスを取得することもできます。

お役に立てば幸いです。

于 2012-10-25T12:23:58.043 に答える
0

直接実行できないため、コードは複雑になります。

ASP.NET AJAX 要求のアーキテクチャでは、要求が完了するまで何も返されません。これにより、次のようないくつかの異なるオプションが残ります。 -

1) オペレーションを複数のロードに分割し、自動的に再部分ポストして次のロードを実行し、ラベルを更新します

2)サーバー上の別のプロセスで操作を実行し(EXEを使用するなど)、タイマーで定期的な部分ポストバックを実行して、サーバー上のEXEと通信し、現在のステータスを取得してラベルを更新します

3) iframe 内のページでタスクを実行し、Response.Write を使用して、バッファリングをオフにして iframe を更新します (または、少なくともステータス更新ごとにフラッシュします)。

于 2012-10-25T12:12:48.757 に答える