问题描述:
回车后,根据编码获取相应记录,然后再将这录绑定到AutoList(我们自定义控件,其实就是下拉列表),回车事件是用jquery ajax实现,这样在后台给AutoList绑定数据源,如果不刷新页面发现AutoList数据源没绑定上去。
问题分析:
AutoList必须要回发才可以将新的数据源绑定上去。而ajax是不会回发的。
解决方法:手工调用__doPostBack
一、js
回车是用jquery ajax实现:
//获取公司名称
$(function() {
$("input[id$='E_1_1_DOMAINID']").keydown(function(e) {
if (e.keyCode == || e.keyCode == ) {
__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; } }