问题描述:
回车后,根据编码获取相应记录,然后再将这录绑定到AutoList(我们自定义控件,其实就是下拉列表),回车事件是用jquery ajax实现,这样在后台给AutoList绑定数据源,如果不刷新页面发现AutoList数据源没绑定上去。
问题分析:
AutoList必须要回发才可以将新的数据源绑定上去。而ajax是不会回发的。
解决方法:手工调用__doPostBack
一、js
回车是用jquery ajax实现:

//获取公司名称 $(function() { $("input[id$='E_1_1_DOMAINID']").keydown(function(e) { if (e.keyCode == 13 || e.keyCode == 9) { __doPostBack("E_1_1_DOMAINID", $("input[id$='E_1_1_DOMAINID']").val()); } }); });
二、后台页面

protected void Page_Load(object sender, EventArgs e) { ///如果页面没有自动生成__doPostBack() ,那么请利用GetPostBackEventReference给客户端生成__doPostBack() ////如果报“__doPostBack”的值为 null,那就是说明要手工调用这个方法 this.Page.GetPostBackEventReference(this, ""); /// 当提交的隐含变量__EVENTTARGET为E_1_1_DOMAINID时,执行代码: if (this.Page.Request["__EVENTTARGET"] == "E_1_1_DOMAINID") { ///绑定你的数据源 alst_CustomCode.ReBindValue(" DOMAINID='" + E_1_1_DOMAINID.Text + "'"); } } 后台页面代码
__doPostBack 说明
__doPostBack带有两个参数,eventTarget是标识将要引发页面PostBack的控件ID,eventArgument参数提供了在引发页面PostBack事件时所带的额外参数。当然这个函数被函数时,这两个参数的值将赋值给页面的两个隐含变量__EVENTTARGET和__EVENTARGUMENT,然后调用页面的submit方法提交页面表单。这就是为什么我们可以通过Request.Form[“__EVENTTARGET”]获取得到引发页面PostBack的控件ID的原因
大部分的控件都是调用这个方法来引了页面的PostBack,只有两个控件是例外,Button 和 ImageButton,正是因为它们不是通过调用__doPostBack来回发事件,所以通过表单隐含变量__EVENTTARGET和__EVENTARGUMENT是无法获取得到引发PostBack的Button或ImageButton的ID和参数值的,只有通过下面的方式才能得它们的实例,进而判断是哪个控件引发的PostBack

foreach (string str in Request.Form) { Control c = Page.FindControl(str); if (c is Button) { control = c; break; } }