在HtmlSelect和DropDownList之间,哪一个具有更好的性能(初始化和渲染更快)?有什么指导方针何时使用?
另一个问题是,如果我要访问的JScript从选择控件的值,我只是在绑定使用HtmlSelect(因为ID不改变),或是否有任何方式强迫DropDownList的使用我的ID,而不是一个像" ctl00_MainContainerContentPlaceHolder_Day1DropDownList"?
由于没有人解决这个问题的表现方面,我想我会试一试.我最初的假设是,这两个选项中的任何一个都会使你获得相似的性能,因为它们会产生几乎相同的渲染HTML.但是,我把以下的.aspx页面放在一起来测试我的理论.
public enum ListType
{
DropDownList,
HtmlList
}
public partial class ListControlRenderTimeComparison : System.Web.UI.Page
{
private Dictionary<ListType, Action<Int32>> _listMap = new Dictionary<ListType, Action<Int32>>();
protected void Page_Load(object sender, EventArgs e)
{
InitializeListMap();
for (int i = 0; i < ControlsToRender; i++)
{
_listMap[ListToRender](NumberOfItems);
}
}
private void InitializeListMap()
{
_listMap.Add(ListType.DropDownList, AddDropDownList);
_listMap.Add(ListType.HtmlList, AddHtmlList);
}
private void AddDropDownList(Int32 controlsToAdd)
{
var ddl = new DropDownList();
for (int i = 0; i < controlsToAdd; i++)
ddl.Items.Add((i + 1).ToString());
form1.Controls.Add(ddl);
}
private void AddHtmlList(Int32 controlsToAdd)
{
var ddl = new HtmlSelect();
for (int i = 0; i < controlsToAdd; i++)
ddl.Items.Add((i + 1).ToString());
form1.Controls.Add(ddl);
}
private Int32 NumberOfItems
{
get
{
Int32 timesToRender;
return Int32.TryParse(Request.QueryString["numItems"], out timesToRender) ? timesToRender : 1;
}
}
private Int32 ControlsToRender
{
get
{
Int32 timesToRender;
return Int32.TryParse(Request.QueryString["numControls"], out timesToRender) ? timesToRender : 1;
}
}
private ListType ListToRender
{
get
{
String listType = Request.QueryString["listType"];
if (String.IsNullOrEmpty(listType)) return ListType.DropDownList;
return (ListType)Enum.Parse(typeof (ListType), listType, true);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我用各种输入测试了这些控件中的每一个,并且发现每种情况下的迹线几乎相同.与DropDownList相比,HtmlOption控件在性能方面具有很小的优势,但即使每个控件100个渲染100个项目,差异也只有几百分之一秒.
所以最后......坚持使用DropDownList控件,因为它有更多选项供您使用.ASP.Net运行时装饰ID的问题可以轻松减轻,如其他答案所示.此外,您可以设计JavaScript函数,使其可以对作为参数传入的ID进行操作.
function doStuff(strId)
{
document.getElementById(strId); //Straight up, no lime
$get(strId); // Asp.Net Ajax Client Side Framework
$(strId); // JQuery
}
Run Code Online (Sandbox Code Playgroud)
如果你这样做,那么很容易绑定到客户端事件(onclick,onmouseover,onmouseout等等),以便在许多地方重用你的行为.
干杯,乔希
| 归档时间: |
|
| 查看次数: |
2224 次 |
| 最近记录: |