相关信息: C#、ASP.Net、SQL2005
我想在TextBox(tbIDNum)失去焦点(onblur)或者改变内容(onchange)时,根据其文本内容从数据库返回其他相关信息填充到页面的其他TextBox中,在读取相信信息之前,我已经对tbIDNum中的文本作了一些客户端验证,尽量保证该数据的有效性,这我已经通过一个验证函数用onchange事件实现了。现在问题是,当客户端验证通过时,我就需要执行下一步的读取数据进行自动填,不知道该如何实现呢?
    
protected void tbnApply_Click(object sender, EventArgs e)
    {
        string chkID = checkIDNum(tbIDNum.Text);
        string  IDCard = tbIDNum.Text;
        IDCard.Replace(" ", "");
        
        SqlConnection conID = new SqlConnection();
        conID.ConnectionString = ConfigurationManager.ConnectionStrings["con"].ConnectionString;
        conID.Open();         SqlDataAdapter adName = new SqlDataAdapter("SELECT * FROM entUser where IDCard = '"+IDCard+"'", conID);
        DataSet dsName = new DataSet();
        adName.Fill(dsName, "data");
        SqlCommand cmdID = new SqlCommand("SELECT RealName FROM entUser WHERE (IDCard = '"+IDCard+"' ) GROUP BY RealName", conID);
        SqlDataReader drName = cmdID.ExecuteReader();
        if (drName.HasRows == true)
        {
            try
            {
                tbName.Text = dsName.Tables["data"].Rows[0][1].ToString();
                tbName.Enabled = false;
                ddlSex.SelectedIndex = (Convert.ToInt32(dsName.Tables["data"].Rows[0][20]) == 0) ? 1 : 2;
                ddlSex.Enabled = false;
            }
            catch (Exception)
            {
            }
        }
        else
        {
            tbName.Enabled = true;
            ddlSex.Enabled = true;
        }
        drName.Close();
        conID.Close();
    }<script language="javascript" type="text/javascript">
function checkNum()
{
  var IDNum = document.getElementById("tbIDNum").value;
  var result = Train.checkIDNum(IDNum).value;
  if ((result != "result") && (result != "null"))
  alert(result);
}
</script>
这是.aspx中的内容,tbIDNum的onchange事件引用该函数。我是想是否可以在这个函数里面,当(result=="result")就执行上面click中的内容,也可以写一个新的函数执行。这段代码本来是通过点击按钮实现的,现在我想把其放到tbIDNum的相关事件里实现。不知道是否可行呢?
在论坛和其他网站上看过一些信息,有人说这是不可行的,其他也都说是可以通过onblur或onchange实现。请教了!有满意的答案可加分。

解决方案 »

  1.   

    补充一下,因为之前我没有弄过这方面的内容,是临时通过看MSDN和网上的一些文章来弄的。有点临时抱佛脚的味道……
    麻烦各位了!
      

  2.   


    就是不知道怎么弄,前面的客户端验证我是用的Ajax+js(从MSDN上看的--!)
      

  3.   

    我这里有个例子,是通过改变form 的提交对象访问的,可以参考下
    在onblur事件里添加下面方法        function ToAction(param) {
                var form = document.forms["formName"];
                form.action = '<%= Url.Content("~/.../Actions?param=") %>' + param;
                form.submit();
            }
      

  4.   

    一段不完全的代码。前几天 刚刚写过这个功能。 function GetYydb()
             {  
                CreateXmlhttp();
                var dname = document.getElementById('<%=txtDocName.ClientID %>').value;
                var url = "Help.aspx?dname="+escape(dname);
                xmlhttp.open("get",url,true);
                xmlhttp.onreadystatechange=Getname;
                xmlhttp.send(null);  
            }建一个页面。 string name= string.Empty;
       if (!IsPostBack)
            {
                Response.Expires = 0;
                Response.CacheControl = "no-cache";
                  if (Request.QueryString["dname"] != null)
                {
                    string doname = Request.QueryString["dname"].ToString();
                    string sql = "select Doc_CuName,Doc_LinkName,Doc_product,Doc_Office from tab_document with(nolock) where Doc_CuNo ='" + doname + "'";
                    name= bll_mother.GetFour(sql);
                }
               Response.Write(name);
                Response.Flush();
                Response.End();
            }bll_mother.GetFour  方法     public static string GetFour(string sql)
           {
               string strname = string.Empty;
               using (SqlConnection con = new SqlConnection(connstr))
               {
                   using (SqlCommand cmd = new SqlCommand(sql, con))
                   {
                       using (SqlDataAdapter dr = new SqlDataAdapter(cmd))
                       {
                           DataTable dt = new DataTable();
                           dr.Fill(dt);
                           System.Text.StringBuilder strId = new System.Text.StringBuilder();
                           System.Text.StringBuilder strName = new System.Text.StringBuilder();
                           System.Text.StringBuilder strPost = new System.Text.StringBuilder();
                           System.Text.StringBuilder strProduct = new System.Text.StringBuilder();
                           for (int i = 0; i < dt.Rows.Count; i++)
                           {
                               strId.Append(dt.Rows[i][0].ToString() + ",");
                               strName.Append(dt.Rows[i][1].ToString() + ",");
                               strPost.Append(dt.Rows[i][2].ToString() + ",");
                               strProduct.Append(dt.Rows[i][3].ToString() + ",");
                           }
                           return strname = strId + "/" + strName + "/" + strPost + "/" + strProduct;
                       }
                   }
                   con.Close();
               }
           }
    //你需要返回几个字段就写几个。后面的SQL语句一样
       function Getname()
         {    
             if(xmlhttp.readyState==4 || xmlhttp.readyState=="Complete")
             {
                var Yydb=xmlhttp.responseText;
                 var text =  document.getElementById('<%=txtDocName.ClientID %>').value;
                if(Yydb == "///" && text != "")
                {   
                var lable = document.getElementById('<%=Label11.ClientID %>'); 
                lable.innerText = "您输入的医生编号不存在!";
                } 
                else
                {
                var grrn = Yydb.split("/");
                var Yydb_Text = grrn[1].split(",");
                var Dname = grrn[0].split(",");
                var text =  document.getElementById('<%=Select4.ClientID %>');
                text.value = Yydb_Text[0];
                var text1 =document.getElementById('<%=txtHzkh.ClientID %>');
                text1.value = Dname[0];         }
         }  <asp:TextBox ID="txtDocName" runat="server" class="textbox" onblur="GetYydb()" asp:TextBox>
      

  5.   


    请问可不可以说下各个代码段放的位置?
    第一段是新建一个js文件还是放在aspx里?
    Getfour方法是新建一个cs文件来写吗?还是放在原有的cs文件里?
      

  6.   

    第二段是放在Page_load里面吗?