问题描述:

回车后,根据编码获取相应记录,然后再将这录绑定到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;

}

} 
04-15 02:07