需求是这样的,自定义了一个用户控件,类似百度搜索时的智能搜索,用到了AjaxControlToolkit,想要的效果就是为这个这个控件选择完成后声明一个事件,在使用这个控件的地方,定制这个事件,绑定数据
相关代码<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Mytxt.ascx.cs" Inherits="WebMemberManage.WebUserControl.Mytxt" %><script type="text/javascript">
                                                     
   function  itemSelected(source, eventArgs)
   {
     var txtManager =  document.getElementById(source.get_element().id); //获得当前编辑的对象
     txtManager.value=txtManager.value.split('(')[0]; 
     loadXMLDoc("~/Default.aspx",txtManager.value);//此处想通过Ajax实现  没有成功  因为是个用户控件,这里到了
                                                   //具体的使用处,相对路径就变化了,只能使用相对于网站根目录
                                                   //的"绝对路径"   但是调试起来是404 找不到
   }        
   
   var xmlhttp;
   
   function loadXMLDoc(url,selectedValue)
   {
      if (window.XMLHttpRequest)
        {// code for IE7+, Firefox, Chrome, Opera, Safari
          xmlhttp=new XMLHttpRequest();
        }
      else
        {// code for IE6, IE5
          xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
      xmlhttp.onreadystatechange=getReturn
      xmlhttp.open("GET",url +"?t="+selectedValue,true);
      xmlhttp.send();
   }    
  
  function getReturn()
    {
      if (xmlhttp.readyState==4)
      {
        alert(xmlhttp.status);
        if( xmlhttp.status==200)
        {
          alert("Ajax")
        }
      }
    }
                               
</script><%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <asp:TextBox ID="txtManager" runat="server" Width="350px"></asp:TextBox>
        <cc1:AutoCompleteExtender ID="txtManager_AutoCompleteExtender" runat="server" TargetControlID="txtManager"
            ServicePath="~/MyWebService.asmx" ServiceMethod="GetSimilarMemberByName" MinimumPrefixLength="1"
            CompletionSetCount="10" EnableCaching="true" CompletionInterval="5" OnClientItemSelected="itemSelected">
        </cc1:AutoCompleteExtender>
    </ContentTemplate>
</asp:UpdatePanel>
 public delegate void MyDel();    [System.Web.Script.Services.ScriptService]
    public partial class Mytxt : System.Web.UI.UserControl
    {
        /// <summary>
        /// 选择完成后触发的事件
        /// </summary>
        public event MyDel GetText;
        protected void Page_Load(object sender, EventArgs e)
        {
          
        }
        public string Text
        {
            get
            {
                return txtManager.Text;
            }
            set
            {
                txtManager.Text = value;
            }
        }
        /// <summary>
        /// 本控件调用事件
        /// </summary>
        protected void DoMyEvent()
        {
            if (GetText != null)
                GetText();
        }
    }1.直接用<%#=……%>就不要提了,那个不和要求
2. xmlhttp.open("GET",url +"?t="+selectedValue,true);这个方法的第二个参数要用相对根目录的路径应该肿么写

解决方案 »

  1.   

    loadXMLDoc("~/Default.aspx",=>loadXMLDoc("/Default.aspx",
      

  2.   

    嗯 是啊  
    loadXMLDoc("/Default.aspx", 
     这个是相对目录吧  根目录是通过“~”来寻找的吧
      

  3.   

    不过问题已经解决了,解决方案上不得台面  先贴出来吧01.<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Mytxt.ascx.cs" Inherits="WebMemberManage.WebUserControl.Mytxt" %>  
    02.  
    03.<script type="text/javascript">  
    04.                                                       
    05.   function  itemSelected(source, eventArgs)  
    06.   {  
    07.     var txtManager =  document.getElementById(source.get_element().id); //获得当前编辑的对象  
    08.     txtManagertxtManager.value=txtManager.value.split('(')[0];   
    09.     var a=document.getElementById("<%=lkb_Submit.ClientID %>");   
    10.     if(a==null)  
    11.     {  
    12.       alert("null");  
    13.       return;  
    14.       }  
    15.     a.click();  
    16.       
    17.   }          
    18.                                 
    19.</script>  
    20.  
    21.<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>  
    22.<asp:UpdatePanel ID="UpdatePanel1" runat="server">  
    23.    <ContentTemplate>  
    24.        <asp:TextBox ID="txtManager" runat="server" Width="350px"></asp:TextBox>  
    25.        <asp:LinkButton  
    26.            ID="lkb_Submit" runat="server" onclick="lkb_Click"></asp:LinkButton>  
    27.        <cc1:AutoCompleteExtender ID="txtManager_AutoCompleteExtender" runat="server" TargetControlID="txtManager"  
    28.            ServicePath="~/MyWebService.asmx" ServiceMethod="GetSimilarMemberByName" MinimumPrefixLength="1"  
    29.            CompletionSetCount="10" EnableCaching="true" CompletionInterval="5" OnClientItemSelected="itemSelected">  
    30.        </cc1:AutoCompleteExtender>  
    31.    </ContentTemplate>  
    32.</asp:UpdatePanel>  
     public delegate void MyDel();  
    06.  
    07.    [System.Web.Script.Services.ScriptService]  
    08.    public partial class Mytxt : System.Web.UI.UserControl  
    09.    {  
    10.        /// <summary>   
    11.        /// 选择完成后触发的事件   
    12.        /// </summary>   
    13.        public event MyDel GetText;  
    14.  
    15.        protected void lkb_Click(object sender, EventArgs e)  
    16.        {  
    17.            if (GetText != null)  
    18.                GetText();  
    19.        }  
    20.  
    21.        protected void Page_Load(object sender, EventArgs e)  
    22.        {  
    23.  
    24.        }  
    25.        public string Text  
    26.        {  
    27.            get  
    28.            {  
    29.                return txtManager.Text;  
    30.            }  
    31.            set  
    32.            {  
    33.                txtManager.Text = value;  
    34.            }  
    35.        }  
    36.  }
      再次谢谢飞哥
      

  4.   


    不过由于AjaxControlToolkit控件库中的东西在界面每次回传的时候 都Dispose了
    所以在使用处 需要每次回发都要订制一遍
    使用处   封装好的用户控件的id就叫做Mytxt1
    01.protected void Page_Load(object sender, EventArgs e)  
    02.       {  
    03.           if (!IsPostBack)  
    04.           {  
    05.              //首次加载的时候  绑定的方法   
    06.           }  
    07.              Mytxt1.GetText += new WebMemberManage.WebUserControl.MyDel(Mytxt1_GetText);  
    08.       }  
    09.  
    10.       void Mytxt1_GetText()  
    11.       {  
    12.           //具体的绑定方法   
    13.       }