Skip to content

MS_ASPNETWebForms

nishi_74322014 edited this page Aug 21, 2026 · 2 revisions

ASP.NET Web Forms

概要

ASP.NET Web Forms は、Web アプリケーションをイベント ドリブン
+ UI コンポーネントベースのアプローチで開発するためのフレームワーク。

豊富なサーバー コントロールにより、HTML レンダリングが行われるため、

  • Web アプリケーションの開発の敷居を下げ、
  • 且つ高い生産性を確保することができた

という点で優れたフレームワークである。

同様のコンポーネントベースのアプローチの JSF も Java EE 5 で Java EE 標準として追加された。

ただし、その利用にあたっては HTTP、HTML の知識が必要となる場面も多く、
UI コンポーネントのレンダリングのカスタマイズの難易度は高いなどのデメリットもある。

補足(最新化:現在の位置づけ): ASP.NET Web Forms は
.NET Framework 4.8.x でのみ動作し、.NET Core 以降には移植されなかった

2019 年に「Blazor で Web Forms 的な開発ができる」という方向性が示され、
実際 Blazor
イベント ドリブン+コンポーネントベースという点で思想を継いでいる。

ただし、.aspx / サーバー コントロール / ViewState を
自動変換する移行パスは存在しない(実質的に作り直しになる)。

一方で、.NET Framework 4.8 は Windows に同梱されてサポートが継続しており、
「期限が切れて動かなくなる」性質のものではない。
塩漬け運用は可能だが、新機能・新ライブラリの恩恵は受けられない。

特徴

  • アーキテクチャが MVC モデルでは無いことと、
  • UI コンポーネントに関する知識が必要になることで、

Struts に慣れた Java 技術者が使いこなすのは困難であるとされている。

イベント・ドリブン+UIコンポーネントベースのアプローチ

ASP に続く HTML 画面の生成技術だが、ASP と大きく異なり、
Windows Forms」の
「イベント・ドリブン+ UI コンポーネントベース」のアプローチと
ほぼ ≒ のプログラミング・モデルを Web アプリケーションでも実現できる
フレームワーク、UI サブシステム。

従って、Visual Studio デザイナと連動した RAD 開発も可能である。

Java は JSF(JavaServer Faces)が ASP.NET Web Forms に似たアプローチをとっている。

補足(この抽象化の代償): 「デスクトップ アプリのように書ける」
という利点は、HTTP のステートレス性を隠蔽することで成立している。
その代償が次の 3 点である。

仕組み 代償
ViewState 画面状態を hidden フィールドに詰めて往復させる。ページが重くなる(数百 KB になることも)
PostBack すべての操作が同一 URL への POST。URL が意味を持たず、ブックマーク・戻るボタン・SEO と相性が悪い
コントロール ツリー サーバー側でページ全体を構築するため、出力 HTML を細かく制御できない

ViewState は既定で暗号化・改ざん検知されるが、
ViewStateUserKey を設定しないと CSRF を防げない
machineKey が漏れると復号・改ざんが可能(MS14-059 / Padding Oracle など
過去に重大な脆弱性の温床になった)といった注意点がある。
使わないページでは EnableViewState="false" にするのが基本である。

HTMLのカスタマイズの難易度が高い

  • また、UI コンポーネントベース(UI コンポーネントから HTML が出力される)方式のため、
    HTML を直接操作できず、出力される HTML のカスタマイズが困難である。

  • この標準 HTML 出力のカスタマイズには、難易度の高い
    ASP.NET サーバーコントロールのカスタム コントロール化が必要になることがある。

  • ASP.NET サーバー コントロールのカスタム コントロール開発が困難な場合、
    下記の HTML サーバー コントロールを使用するという手段もある。

参考

移行メモ: 元ページの名前空間は System.Web.UI.HtlControls
綴りが落ちていたため、System.Web.UI.HtmlControls に正した。

補足(実務でのカスタマイズ手段): カスタム コントロール開発は
確かに難易度が高いが、その手前に打てる手がある。

手段 内容
ControlAdapter コントロールのレンダリングだけを差し替える(.browser ファイルで適用)
CssFriendlyAdapters <table> 出力を <ul> 等に変える定番アダプタ集
HTML サーバー コントロール 上記の通り、素の HTML に runat="server" を付ける
Literal / Repeater HTML を自分で書く。GridView の代わりに Repeater を使うと出力を完全に制御できる

GridView をやめて Repeater にする」だけで、
HTML 制御の問題の大半は解消することが多い。

参考


Tags: 移行, .NET開発, ASP.NET, ASP.NET Web Forms

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally