ASP.NETのLiterl と LiterlControl の違い
LiteralとLiteralControlの違いを紹介します。
Literal
- 名前空間: System.Web.UI.WebControls
- コントロール内への子コントロールの追加:不可
- aspxファイルへの記述:可]}
- ビューステート:保持する]}
LiteralControl
- 名前空間: System.Web.UI
- コントロール内への子コントロールの追加:不可
- aspxファイルへの記述:不可]}
- ビューステート:保持しない]}
- 設定文字列を与えるコンストラクタがある。
ViewStateの保持について
LiteralではViewStateが保持されるのに対し、LiteralControlではViewStateは保持されません。動作の違いを以下のサンプルプログラムで確認します。
UI
下図のUIを作成します。
aspxファイルのコードは以下になります。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="default.aspx.cs" Inherits="LiteralDemo._default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="Button1" runat="server" Text="変更" OnClick="Button1_Click" />
<asp:Button ID="Button2" runat="server" Text="Button" OnClick="Button2_Click" />
</div>
</form>
</body>
</html>
コード
以下のコードを記述します。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace LiteralDemo
{
public partial class _default : System.Web.UI.Page
{
Literal literal = new Literal();
LiteralControl literalControl = new LiteralControl();
protected void Page_Load(object sender, EventArgs e)
{
literal.Text = "Literalです。<br/>";
Page.Controls.Add(literal);
literalControl.Text = "LiteralControlです。<br/>";
Page.Controls.Add(literalControl);
}
protected void Button1_Click(object sender, EventArgs e)
{
literal.Text = "テキストを変更<br/>";
literalControl.Text = "テキストを変更<br/>";
}
protected void Button2_Click(object sender, EventArgs e)
{
}
}
}
解説
LiteralとLiteralControlのインスタンスを1つずつ生成しページに配置します。ページのロード時(Page_Load)にそれぞれのコントロールに文字列を設定します。Button1のClickイベントでLiterlとLiteralControlのTextプロパティを変更しています。Button2は何も実装せずにポストバックのみの動作とします。
実行結果
プロジェクトを実行します。Webブラウザが起動し、下図の画面が表示されます。
[変更]ボタン(button1)をクリックします。Literl, LiterlControlともにテキストが「テキストを変更」に変更されました。
[Button]ボタン(button2)をクリックします。ポストバックによりページが更新されたのち下図の画面が表示されます。Literlは[変更]ボタンを押した際に変更された文字列がそのまま保持されているのに対し、LiterlControlは初期状態の文字列に戻ってしまっていることがわかります。
コンストラクタについて
LiterlControlはコンストラクタの引数でTextプロパティを設定できます。Literalにはコンストラクタでの設定はできません。これは、LiterlはWebフォーム(aspxファイル)に配置するコントロールのためと考えられます。
LiteralControl literalControl = new LiteralControl("LiteralControlです。");
使い分け
LiteralとLiteralコントロールの使い分けは以下を目安にします。
Literal
- aspxファイルに記述する必要がある
- デザイン時に場所を決定できる
- ViewStateを保持する必要がある
LiteralControl
- aspxファイルには記述しない
- デザイン時に動的に場所が変わる (コードにより生成される)
- ViewStateは保持されなくても構わない (ページロードごとに文字列を設定する)
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用