HtmlSelect与DropDownList

nia*_*her 1 asp.net

在HtmlSelect和DropDownList之间,哪一个具有更好的性能(初始化和渲染更快)?有什么指导方针何时使用?

另一个问题是,如果我要访问的JScript从选择控件的值,我只是在绑定使用HtmlSelect(因为ID不改变),或是否有任何方式强迫DropDownList的使用我的ID,而不是一个像" ctl00_MainContainerContentPlaceHolder_Day1DropDownList"?

Jos*_*osh 5

由于没有人解决这个问题的表现方面,我想我会试一试.我最初的假设是,这两个选项中的任何一个都会使你获得相似的性能,因为它们会产生几乎相同的渲染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等等),以便在许多地方重用你的行为.

干杯,乔希