-
Notifications
You must be signed in to change notification settings - Fork 0
MS_ASPNETWebForms
- 戻る(ASP.NET)
- ASP.NET Web Forms
- ASP.NET MVC
- ASP.NET Web Pages
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 技術者が使いこなすのは困難であるとされている。
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"にするのが基本である。
-
また、UI コンポーネントベース(UI コンポーネントから HTML が出力される)方式のため、
HTML を直接操作できず、出力される HTML のカスタマイズが困難である。 -
この標準 HTML 出力のカスタマイズには、難易度の高い
ASP.NET サーバーコントロールのカスタム コントロール化が必要になることがある。 -
ASP.NET サーバー コントロールのカスタム コントロール開発が困難な場合、
下記の HTML サーバー コントロールを使用するという手段もある。
-
HtmlControl クラス (System.Web.UI.HtmlControls)
https://learn.microsoft.com/dotnet/api/system.web.ui.htmlcontrols.htmlcontrolSystem.Web.UI.HtmlControls.HtmlAreaSystem.Web.UI.HtmlControls.HtmlContainerControlSystem.Web.UI.HtmlControls.HtmlImageSystem.Web.UI.HtmlControls.HtmlInputControlSystem.Web.UI.HtmlControls.HtmlLinkSystem.Web.UI.HtmlControls.HtmlMetaSystem.Web.UI.HtmlControls.HtmlSourceSystem.Web.UI.HtmlControls.HtmlTitleSystem.Web.UI.HtmlControls.HtmlTrack
移行メモ: 元ページの名前空間は
System.Web.UI.HtlControlsと
綴りが落ちていたため、System.Web.UI.HtmlControlsに正した。
-
ASP.NET Web ページへの HTML サーバー コントロールの追加
https://learn.microsoft.com/previous-versions/aspnet/fs6fbk8a(v=vs.100)- 方法 : ASP.NET 構文を使用して HTML サーバー コントロールを Web ページに追加する
- 方法 : HTML サーバー コントロールを HTML 要素に変換する
-
方法 : HTML サーバー コントロール プロパティをプログラムで設定する
https://learn.microsoft.com/previous-versions/aspnet/wwhe0at8(v=vs.100)
補足(実務でのカスタマイズ手段): カスタム コントロール開発は
確かに難易度が高いが、その手前に打てる手がある。
手段 内容 ControlAdapterコントロールのレンダリングだけを差し替える( .browserファイルで適用)CssFriendlyAdapters<table>出力を<ul>等に変える定番アダプタ集HTML サーバー コントロール 上記の通り、素の HTML に runat="server"を付けるLiteral/RepeaterHTML を自分で書く。 GridViewの代わりにRepeaterを使うと出力を完全に制御できる「
GridViewをやめてRepeaterにする」だけで、
HTML 制御の問題の大半は解消することが多い。
Tags: 移行, .NET開発, ASP.NET, ASP.NET Web Forms
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。