ketyiaの学んだこと議事録

このサイトでは学んだことを記事にまとめていきます

ASP.NETについて勉強③ ~ポストバックとViewState~

ASP.NETについて勉強③ ~ポストバックとViewState~

こんばんは!
今、C#ASP.NETについて学んでいますので、アウトプットで記事にまとめていきます!!

今回はポストバックとViewStateについてまとめていきます。

ポストバック


ポストバックは、ASP.NETのWebページが自分自身にデータを送信するプロセスを指します。これは、ユーザーがページ上のコントロール(ボタン、ドロップダウンリストなど)を操作したときに発生します。操作が行われると、ページはサーバーに送信され、ページのライフサイクルが再度開始されます。

ポストバックの流れ


1.ユーザーがWebページ上のコントロールを操作します(例えば、ボタンをクリックします)。

2.ブラウザはHTTP POSTリクエストをサーバーに送信します。このリクエストには、ページの現在の状態(ビューステート)と、ユーザーが操作したコントロールの情報が含まれます。

3.サーバーはリクエストを受け取り、ページのライフサイクルを開始します。このライフサイクルには、ページの初期化、ビューステートの読み込み、イベントハンドラの実行などが含まれます。

4.サーバーは更新されたページをブラウザに送り返します。

ポストバックの利点


ポストバックの主な利点は、サーバーサイドでコードを実行できることです。これにより、データベースへのクエリ、複雑な計算、ファイルの操作など、クライアントサイドでは実行できない操作を行うことができます。また、ポストバックを使用すると、ページの状態を維持することができます。これは、ASP.NETのビューステート機能により可能になります。ビューステートは、ページのコントロールの状態を保存し、ポストバックの間で保持する機能です。

ASP.NETのページインスタンスの破棄と再生成


ページインスタンスの破棄

ASP.NETのページライフサイクルは、ユーザーがページをリクエストするたびに開始されます。このライフサイクルは、ページインスタンスの生成、イベントの処理、ページのレンダリング、そして最終的にはページインスタンスの破棄を含みます。

ページインスタンスの破棄は、ページライフサイクルの最後のステップで、ページがレンダリングされた後に行われます。このステップでは、ページインスタンスとそのすべてのコントロールがメモリから解放されます。これにより、システムリソースが効率的に管理され、パフォーマンスが向上します。


ページインスタンスの再生成

ページインスタンスの再生成は、次のページリクエストが発生したときに行われます。新しいリクエストが発生すると、ASP.NETは新しいページインスタンスを生成し、ページライフサイクルが再度開始されます。

このプロセスは、ページがポストバックされるたびに発生します。つまり、ユーザーがページ上のコントロールを操作すると、ページはサーバーに送信され、新しいページインスタンスが生成されます。

ページインスタンスの破棄と再生成の重要性

ページインスタンスの破棄と再生成は、ASP.NETのパフォーマンスとスケーラビリティに重要な役割を果たします。これらのプロセスにより、システムリソースが効率的に管理され、大量のユーザーが同時にアクセスしてもアプリケーションが正常に動作することが保証されます。

しかし、これらのプロセスはページの状態を維持することを難しくします。これは、ページインスタンスが破棄されると、その状態も失われるためです。この問題を解決するために、ASP.NETはビューステートとセッションステートという機能を提供しています。

ViewState

 

ビューステートは、ASP.NETページとそのコントロールの状態をページリクエスト間で保持するための技術です。ビューステートは、ページがポストバックされるときに、ページとそのコントロールのプロパティ値を保存します。次にページがロードされるとき、これらの値はビューステートから読み込まれ、ページとコントロールの状態が復元されます。

ビューステートは主に、ページとそのコントロールが自身の状態を自動的に管理するために使用されます。しかし、ビューステートはページリクエスト間でのデータの永続性を保証するための手段ではありません。ビューステートはページがポストバックされるときにのみ保存され、ページが新しくロードされるときにはクリアされます。

SessionState


セッションステートは、ユーザー固有の情報をサーバー側に保存するための技術です。セッションステートは、ユーザーがWebサイトを閲覧するセッション全体にわたってデータを保持します。これにより、ユーザーがページを移動するときに状態を維持することができます。

セッションステートは、ショッピングカートのようなユーザー固有の情報を保存するためによく使用されます。ユーザーがサイトを閲覧する間、商品をカートに追加したり削除したりできます。そして、ユーザーがチェックアウトするときに、そのカートの情報が必要になります。

ViewStateとSessionStateの違い


ビューステートとセッションステートは、ASP.NETがページの状態を維持するための2つの主要な技術です。ビューステートはページとそのコントロールの状態をポストバック間で保持し、セッションステートはユーザー固有の情報をセッション全体にわたって保持します。

実際にASP.NET Web Formsで試してみる


以下のようなコードを書いてみます。

>|aspx| 
<%--
    FileName: test.aspx
    Created by: keita
  Created on: 2024.6

    Description: 
   ポストバックとViewStateの動作を試します
--%>

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test.aspx.cs" Inherits="test" %>

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>ポストバックとViewStateのテスト</title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
            <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
        </div>
    </form>
</body>
</html>
||<

 

>|C#|
/*
 * FileName: test.aspx.cs
 * Created by: keita
 * Created on: 2024.6
 * 
 * Description: 
 * ポストバックとViewStateの動作を試します
 */
using System;

public partial class test : System.Web.UI.Page

{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            ViewState["ClickCount"] = 0;
        }
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        int clickCount = (int)ViewState["ClickCount"] + 1;
        ViewState["ClickCount"] = clickCount;
        Label1.Text = "Button clicked " + clickCount + " times.";
    }
}
||<


では実行してみましょう


ボタンを押すと下記みたいにカウントされます!


このコードでは、ボタンがクリックされるたびに、ViewStateに保存されたクリック数が増加し、その結果がラベルに表示されます。これにより、ポストバック後もクリック数が保持されます。このように、ViewStateとポストバックは、ユーザーの操作に対するサーバーの応答を可能にします。

とても大切な要素なのでしっかり使いこなしていきたいですね!

今日はここまでです♪
ここまで読んでいただきありがとうございます!