私の会社がオンラインで必要とするフォームのリストが大量にあり、ユーザーがフォームに入力し、提出物を表示するために戻ってきた後、フォームを「ロック」する必要があります。ASP.NET C# Web フォームを使用して作成されたフォームは既に数十あるため、最後の開発者が中断したところから始めるように言われました。彼らは、フォームを表示、送信、および編集するための別のページを作成したので、変更が入った場合、複数の場所で同じ変更を行う必要があります。フォームごとにユーザー コントロールを作成して、3 つの場所すべてで同じページを使用できるようにしたいのですが、作業をどこに移動するかを考え始めました。
最初に頭に浮かんだのは、フィールドの有効化/無効化を行い、CSS を使用して表示されたフィールドをテキストとしてスタイル設定することでした。(そして、閲覧時に一番下にある保存ボタンを外す)これは一見簡単そうに見えて、JSとCSSを使ってきれいなフォームを作る作業をブラウザに移しています。
次に、リテラルの後に入力フィールドを使用して、ユーザーが提出物をプレビューしているときに入力フィールドを非表示にするように表示を切り替えました。これにより、ページ上のコントロールの数が 2 倍になりましたが、どの入力がどのコントロールに対応するかは正確にわかりました。
3 つ目の考えは、プレースホルダーを使用して必要に応じて調整することで、ページを動的に構築することでした。すべてのフィールドと型をデータベースに保存でき、コードに手を加えることなくフォームをすばやく注文して変更できるため、これは良さそうに見えました。
私の最初のアイデアは最も簡単に思えますが、.NET で 100 以上のコントロールを含むフォームを作成する必要がある場合と、フォームを動的に作成する場合のパフォーマンスの違いは何ですか? ページ全体 (またはそのほとんど) を動的に構築するのと、100 以上のプレースホルダーを使用して動的にする必要がある領域だけを構築するのとではどちらがよいでしょうか? 「確かに、フォームを簡単に変更できるようになりましたが、ページを読み込むのに 20 秒かかります」と人々に言われたくありません。
更新 1:
カール・アンダーソンのアドバイスを受けて、いくつかのテストを実行しました。最初のセルがテキスト ("名前:") で、2 番目のセルが入力 (テキストボックス) であるテーブルを含む 3 つのページを設定しました。それは本当に簡単でしたが、ここに行があります:
(1) コントロール:
<tr>
<td>
Name:
</td>
<td>
<asp:TextBox ID="Textbox1" runat="server"></asp:TextBox>
</td>
</tr>
(2) 複数のプレースホルダー:
<tr>
<td>
Name:
</td>
<td>
<asp:PlaceHolder ID="Placeholder1" runat="server"></asp:PlaceHolder>
</td>
</tr>
(3) 単一のプレースホルダー: そして最後のものについては、ページに単一のプレースホルダーがあり、次を使用して分離コードでテーブルを作成しました。
Table tbl = new Table();
for (int i = 0; i <= X; i++)
{
TableRow tr = new TableRow();
TableCell td = new TableCell();
td.Text = "Name:";
tr.Cells.Add(td);
td = new TableCell();
TextBox txtbx1 = new TextBox();
td.Controls.Add(txtbx1);
tr.Cells.Add(td);
tbl.Rows.Add(tr);
}
Placeholder1.Controls.Add(tbl);
X は、追加する行数です。
結果:
ページをロードしてから 10 回更新し、.NET のトレースを使用してページのロードにかかった平均時間を取りました。
(1) コントロール:
コントロール時間 (秒)
10 0.002089
20 0.003204
30 0.004530
40 0.005943
50 0.006821
100 0.013542
150 0.020033
(2) 複数のプレースホルダー:
コントロール 時間 (秒)
10 0.002604
20 0.004419
30 0.006507
40 0.008509
50 0.011194
100 0.024640
150 0.039748
(3) 単一のプレースホルダー:
制御時間 (秒)
10 0.003501
20 0.005794
30 0.008264
40 0.010616
50 0.013048
100 0.024158
150 0.032826
1 つのコントロールと 1 つのプレースホルダーを比較した場合の読み込みにかかった時間は、コントロール 10 個では約 24.6% でしたが、コントロール 150 個では 98.4% 長くなりました。複数のコントロールを単一のプレースホルダーと比較すると、10 個のコントロールで最大 67.6% 長いロード時間から 150 個のコントロールで最大 63.8% 長いロード時間で始まりました。
( jadarnel27で提案されているように) FormView を操作してみて、結果を比較します。
(これらのテストは、2.26 GHz の Intel Xeon E5520 プロセッサで実行しました)