我有很多我的公司想要在线的表格,他们要求在用户填写表格并返回查看他们提交的表格后“锁定”这些表格。已经有几十个使用 ASP.NET C# Web 表单创建的表单,所以我被告知从上一个开发人员离开的地方继续。他们创建了一个单独的页面来查看、提交和编辑表单,因此如果发生更改,我需要在多个位置进行相同的更改。我想为每个表单创建一个用户控件,以便我可以在所有三个位置使用相同的页面,但我开始考虑将工作转移到哪里。
想到的第一件事就是对字段进行启用/禁用,并使用 CSS 将显示的字段设置为文本样式。(并在查看时删除底部的保存按钮)这看起来很简单,我将使用 JS 和 CSS 制作漂亮表单的工作转移到浏览器中。
接下来,我研究了使用文字后跟输入字段,当用户预览提交时切换可见性以隐藏输入字段。这使页面上的控件数量增加了一倍,但我确切地知道哪个输入与哪个控件一起使用。
我的第三个想法是通过使用占位符并根据需要进行调整来动态构建页面。这看起来不错,因为我可以将所有字段和类型存储在数据库中,允许快速排序和更改表单而无需接触代码。
我的第一个想法似乎是最简单的,但如果 .NET 需要构建具有 100 多个控件的表单与动态构建表单,那么性能有何不同?是动态构建整个页面(或大部分页面)更好,还是拥有 100 多个占位符并仅构建需要动态的区域?我不希望人们说“当然,您使修改表单更容易,但加载页面需要 20 秒”。
更新1:
听从karl -anderson的建议,我进行了一些测试。我设置了三个页面,其中包含一个表格,第一个单元格是文本(“名称:”),第二个单元格是输入(文本框)。这真的很简单,但这里是行:
(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
将单个控件与单个占位符进行比较时,加载时间从 10 个控件的大约 24.6% 长到 150 个控件的大约 98.4% 长。将多个控件与单个占位符进行比较,开始时 10 个控件的加载时间增加了约 67.6%,而 150 个控件的加载时间增加了约 63.8%。
我将尝试使用 FormView(如jadarnel27建议的那样),我将比较结果。
(我在 2.26GHz 的 Intel Xeon E5520 处理器上进行了这些测试)