导航
  • 主页
  • .NET Framework
  • ASP
  • Web Services
  • .NET互联网桌面应用
  • VB
  • 图表区
  • 分析与设计
  • 组件/控件开发
  • AppLauncher
  • 问答

请教TextBox失去焦点或改变内容时触发服务端事件

静远 2010-01-28 04:34:40
相关信息: 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实现。

请教了!有满意的答案可加分。
...全文
376 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
yang_5 2010-01-28
回复
静远 2010-01-28
[Quote=引用 8 楼 calvindo 的回复:]
看上次复杂 其实很简单的。。
 
[/Quote]
第二段是放在Page_load里面吗?
回复
静远 2010-01-28
[Quote=引用 8 楼 calvindo 的回复:]
看上次复杂 其实很简单的。。
 
[/Quote]

请问可不可以说下各个代码段放的位置?
第一段是新建一个js文件还是放在aspx里?
Getfour方法是新建一个cs文件来写吗?还是放在原有的cs文件里?
回复
CalvinDo 2010-01-28
看上次复杂 其实很简单的。。
回复
CalvinDo 2010-01-28
一段不完全的代码。前几天 刚刚写过这个功能。

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>
回复
丰云 2010-01-28
我这里有个例子,是通过改变form 的提交对象访问的,可以参考下
在onblur事件里添加下面方法

function ToAction(param) {
var form = document.forms["formName"];
form.action = '<%= Url.Content("~/.../Actions?param=") %>' + param;
form.submit();
}
回复
静远 2010-01-28
[Quote=引用 1 楼 zmcici 的回复:]
用Ajax
[/Quote]
因为是临时看这方面的东西,所以只知道点点皮毛,后者皮毛都没。
回复
静远 2010-01-28
[Quote=引用 2 楼 calvindo 的回复:]
用AJAX+js
[/Quote]

就是不知道怎么弄,前面的客户端验证我是用的Ajax+js(从MSDN上看的--!)
回复
静远 2010-01-28
补充一下,因为之前我没有弄过这方面的内容,是临时通过看MSDN和网上的一些文章来弄的。有点临时抱佛脚的味道……
麻烦各位了!
回复
CalvinDo 2010-01-28
用AJAX+js
回复
发动态
发帖子
.NET技术社区
创建于2007-09-28

5.8w+

社区成员

.NET技术交流专区
申请成为版主
社区公告
暂无公告