0

ユーザーのページ読み込みをブロックせずに、Web フォーム ページの Page_Load メソッドで非同期メソッドを実行する方法を見つけようとしています。私は次のコードを使用しています:-

C# コードビハインド

public partial class _Default : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        RegisterAsyncTask(new PageAsyncTask(AsyncDatabind));
    }

    private async Task AsyncDatabind()
    {
        await Task.Delay(5000);
        Test.Text = "Hello!";
    }
}

ASPX ビュー

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="AsyncTest._Default" Async="true"%>

<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
    <asp:Label ID="Test" runat="server"></asp:Label>
</asp:Content>

理想的には、ユーザーのためにページが読み込まれ、非同期タスクが完了した後にラベルが更新されます。そのため、ラベル テキストが設定される前に、ページが 5 秒間表示されている必要があります。これは PageAsyncTask を使用して可能ですか?

4

2 に答える 2

3

非同期かどうかに関係なく、ページのすべてのサーバー側コードが実行され、その結果が HTML にレンダリングされてクライアントに送信されます。クライアントにとって、あなたがしていることは何の役にも立ちません。

代わりに、最初にクライアントに初期コンテンツを取得し、次に AJAX を使用してサーバーに後続の要求を行うことに重点を置きます。これは理想的には、最初のリクエストで実行される可能性のある Page_Load またはその他のメソッドをできるだけ少なくすることを意味します。

Joe とは異なり、私は UpdatePanel の使用をお勧めしません。代わりに、jQuery AJAXZepto.js AJAX、またはAngular の HTTP サービスなど、AJAX のより低い抽象化を使用することを学びます。サーバーがこれらの要求に応答するには、ASP.NET Web APIまたはHTTP ハンドラーを実装します。

シングル ページ アプリケーションで使用される手法の多くは便利ですが、目的を達成するために完全な SPA を使用する必要はありません。 SPA ダイアグラム

于 2015-07-28T14:08:27.807 に答える