比如DropDownList的autopostback属性。用户在用键盘选择不同的dropdownlist的数据项时,用键盘的上下键切换的时候,每切换一次都会触发autopostback.但是,实际情况是用户还没有正确选到自己的数据项,就出发了autopostback.浪费大量的时间。
有没有可能
方法1。设定一个滞后时间值,在这里值以内,不要触发autopostback。
方法2。是不是可以用户通过上下键选择好自己的项目后,通过回车键来触发postback.不知道哪位可以指点一二。

解决方案 »

  1.   

    在dropdownlist的onblur函数中dopostback
      

  2.   

    两个方法都不能将Autopostback设为true,要实现第一个方法,必须自己写客户端脚本,至于第二个方法,如果当前页面上有submit button,按回车键就应该可以自动提交的。
      

  3.   

    one more time, don't use __doPostBack directly! it is not recommended, set AutoPostBack=false, then in your code, addDropDownList1.Attributes.Add("onblur", "javascript:" & Page.GetPostBackEventReference(DropDownList1))
      

  4.   

    saucer能否说说我提的第二种方法的可能性,就是说,是否能让DropDownList控件支持类似键盘回车这样的事件?
    而不是onBlur,这样的。也许我的这个思路的逻辑出发点就是错误的?
      

  5.   

    yes, you can do that, but watch out, in some cases, the default button might be triggered:
    <form runat='server'>
    <asp:DropDownList id=ddl runat='server' OnSelectedIndexChanged='Select_Change'>
     <asp:ListItem Text='One' Value='1' />
     <asp:ListItem Text='Two' Value='2' />
     <asp:ListItem Text='Three' Value='3' />
    </asp:DropDownList>
    <asp:TextBox runat='server' /><asp:Button runat='server' OnClick="DoSubmit" />
    </form>
    <script language='C#' runat='server'>
    void Page_Load(Object sender, EventArgs e)
    {
      ddl.Attributes["onkeyup"] = String.Format("javascript:if (event.keyCode == 13) {0};", GetPostBackEventReference(ddl));
    }
    void Select_Change(Object sender, EventArgs e)
    {
     Response.Write("in Select_Change:" + ddl.SelectedItem.Value);
    }void DoSubmit(Object sender, EventArgs e)
    {
    Response.Write("in submit:" + ddl.SelectedItem.Value);
    }</script>
      

  6.   

    ok,i will be in mind.
    thanks for all guys