ketyiaの学んだこと議事録

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

ASP.NETについて勉強④ ~画面遷移と状態管理~

ASP.NETについて勉強③ ~画面遷移と状態管理~


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

今回は画面遷移と状態管理についてまとめていきます。

画面遷移


画面遷移とは、一つの画面から別の画面への移動を指します。これは、ユーザーがアプリケーション内で異なるタスクを実行するために必要なものです。ASP.NETでは、画面遷移は主にResponse.RedirectメソッドやServer.Transferメソッドを使用して行われます。

Response.Redirect

Response.Redirectは、ASP.NETの組み込みメソッドで、現在のページから別のURLにリダイレクトするために使用されます。このメソッドは、ユーザーが特定のアクションを実行した後に別のページに移動する必要がある場合など、多くのシナリオで役立ちます。

Response.Redirectメソッドは、2つのオーバーロードを持っています。

Response.Redirect(string url)

これは上記で説明した基本的な使用法です。ここでurlは、リダイレクト先のURLを指定します。

Response.Redirect(string url, bool endResponse)

このオーバーロードでは、2つ目のパラメータendResponseを使用して、リダイレクト後に現在のページの処理を終了するかどうかを制御できます。endResponseがtrueの場合、リダイレクト後に現在のページの処理が終了します。falseの場合、リダイレクト後も現在のページの処理が続行されます。

使用する上での注意点

Response.Redirectは、HTTPステータスコード302を使用してブラウザにリダイレクトを指示します。これは、一時的なリダイレクトを意味します。

Response.Redirectを使用すると、現在のページのすべての応答データがクリアされます。したがって、リダイレクト前に重要なデータを保存する必要があります。

Response.Redirectは、サーバーサイドの操作です。したがって、クライアントサイドのスクリプトや操作には影響しません。

Server.Transfer

サーバーサイドでの画面遷移を行います。現在のページの実行を終了し、新しいページの実行を開始します。これにより、ブラウザは新しいURLを知らず、URLバーには元のURLが表示されます。

Server.Transferはサーバーサイドの操作であるため、クライアントサイドのスクリプトや操作には影響しません。また、Server.Transferは現在のページの処理を終了するため、リダイレクト前に重要なデータを保存する必要があります。

状態管理


状態管理とは、アプリケーションの「状態」を追跡し、制御することを指します。ここで言う「状態」とは、アプリケーションが特定の時点で持っているデータのことを指します。これは、ユーザーが入力した情報、ユーザーの設定、ユーザーがアプリケーションで行った操作の履歴など、さまざまな形で存在します。

状態管理は、アプリケーションが一貫性を保ち、期待通りに動作するために必要です。例えば、ユーザーが商品をオンラインショッピングカートに追加した場合、その情報(状態)は保存され、ユーザーがチェックアウトする際に再度参照されます。このように、状態管理はアプリケーションの動作を制御し、ユーザーエクスペリエンスを向上させるために不可欠です。

状態管理手法


ユーザ状態管理

ユーザ状態管理は、特定のユーザーの情報や状態を保持するための手法です。

ビューステート


ビューステートは、ページのライフサイクルの間にページとそのコントロールの状態を保持するためのASP.NETのメカニズムです。これはクライアントサイドの状態管理手法で、ページのHTMLに埋め込まれます。

クッキー

クッキーは、クライアントのブラウザに保存される小さなテキストファイルで、サーバーとクライアント間で情報を交換するために使用されます。これもクライアントサイドの状態管理手法です。

セッション状態

セッション状態は、ユーザー固有の情報をサーバーサイドに保存します。これにより、ユーザーがアプリケーションを使用する間、その情報を保持することができます。

クエリ文字列

クエリ文字列は、URLの一部としてデータを送信する方法です。これは、一般的には小さなデータ量の送信や、状態を保持するために使用されます。

プロファイルプロパティ

プロファイルプロパティは、ユーザー固有の情報をデータベースに保存します。これにより、ユーザーがアプリケーションを使用する間、またはそれを超えて、その情報を保持することができます。

HttpContext

HttpContextは、HTTPリクエストとレスポンスに関連するすべての情報をカプセル化します。これには、セッション状態やアプリケーション状態など、状態管理に関連する情報も含まれます。これはサーバーサイドの状態管理手法です。

アプリケーション状態管理

アプリケーション状態管理は、アプリケーション全体で共有される情報を保持するための手法です。

アプリケーション状態

アプリケーション状態は、アプリケーション全体で共有される情報を保持します。これは、すべてのユーザーとセッション間で共有されます。

キャッシュオブジェクト

キャッシュオブジェクトは、頻繁に使用されるデータをサーバーのメモリに一時的に保存するための手法です。これにより、データへのアクセス速度を向上させることができます。

静的変数

静的変数は、アプリケーションのライフタイム全体で値を保持する変数です。これは、すべてのユーザーとセッション間で共有されます。

SQL Serverセッション状態

SQL Serverセッション状態は、セッション状態をSQL Serverデータベースに保存する手法です。これにより、セッション状態をアプリケーションの複数のインスタンス間で共有することができます。

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


以下のようなコードを書いてみます
まずは遷移前のコードです!

 

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

    Description: 
  画面遷移と状態管理の動作を試します
--%>

<%@ 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>画面遷移と状態管理遷移前</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Label ID="Label1" runat="server" Text="名前を入力してください"></asp:Label>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:Button ID="Button1" runat="server" Text="送信" OnClick="Button1_Click" />
    </div>
    </form>
</body>
</html>
||<

 

>|C#|
/*
 * FileName: test.aspx.cs
 * Created by: keita
 * Created on: 2024.6
 * 
 * Description: 
* 画面遷移と状態管理の動作を試します
*/
using System;

public partial class test : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        Session["Name"] = TextBox1.Text;
        Response.Redirect("test2.aspx");
    }
}
||<

 

次に遷移後の画面です!

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

    Description: 
  画面遷移と状態管理の動作を試します
--%>

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

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <title>画面遷移と状態管理遷移後</title>
</head>
<body>
   <asp:Label ID="label1" runat="server" />
</body>
</html>
||<

 

>|C#|
/*
* FileName: test2.aspx.cs
 * Created by: keita
 * Created on: 2024.6
 * 
 * Description: 
* 画面遷移と状態管理の動作を試します
*/
using System;

public partial class test2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
      if (!IsPostBack)
        {
            label1.Text = (string)Session["Name"];
            Session.Remove("Name");
        }
    }
}
||<


では実行してみましょう

 


ユーザーがテキストボックスに名前を入力し、送信ボタンをクリックすると、その名前がセッションに保存され、ユーザーはtest2.aspxにリダイレクトされます。 test2.aspxでは、このセッション変数を取得して使用することができます。

前回と少しかぶる部分はあったかもですがどれも大切です~
しっかり押さえておきましょう!

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