一年多前,Insus.NET有写过一篇 《对象失去焦点时自己动提交数据》,那一篇是依赖Linkbutton来做隐藏提交。是否有不用依赖Linkbutton方法呢? 答案是肯定的。
.aspx页只拉一个TextBox控件:


1
<%
@ Page Language
=
"
C#
"
AutoEventWireup
=
"
true
"
CodeFile
=
"
Default.aspx.cs
"
Inherits
=
"
_Default
"
%>
2
3 <! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
4
5 < html xmlns ="http://www.w3.org/1999/xhtml" >
6 < head runat ="server" >
7 < title ></ title >
8 </ head >
9 < body >
10 < form id ="form1" runat ="server" >
11 < asp:TextBox ID ="TextBox1" runat ="server" ></ asp:TextBox >
12 </ form >
13 </ body >
14 </ html >
2
3 <! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
4
5 < html xmlns ="http://www.w3.org/1999/xhtml" >
6 < head runat ="server" >
7 < title ></ title >
8 </ head >
9 < body >
10 < form id ="form1" runat ="server" >
11 < asp:TextBox ID ="TextBox1" runat ="server" ></ asp:TextBox >
12 </ form >
13 </ body >
14 </ html >
.aspx.cs页中,首选在Page_Init事件,为TextBox注册OnBlur事件:


protected
void Page_Init(
object sender, EventArgs e)
{
this.TextBox1.Attributes.Add( " onblur ", Page.ClientScript.GetPostBackEventReference( this.TextBox1, " OnBlur "));
}
{
this.TextBox1.Attributes.Add( " onblur ", Page.ClientScript.GetPostBackEventReference( this.TextBox1, " OnBlur "));
}
写一个onBlue事件,将替代LinkButton的Click事件:


private
void OnBlurHandle(
string ctrl,
string args)
{
if (ctrl == this.TextBox1.UniqueID && args == " OnBlur ")
{
// 这里写提交到数据库中
}
}
{
if (ctrl == this.TextBox1.UniqueID && args == " OnBlur ")
{
// 这里写提交到数据库中
}
}
然后在网页的Page_Load事件,判断是否IsPostBack。


protected
void Page_Load(
object sender, EventArgs e)
{
if (IsPostBack)
{
var ctrl = Request.Params[Page.postEventSourceID];
var args = Request.Params[Page.postEventArgumentID];
OnBlurHandle(ctrl, args);
}
}
{
if (IsPostBack)
{
var ctrl = Request.Params[Page.postEventSourceID];
var args = Request.Params[Page.postEventArgumentID];
OnBlurHandle(ctrl, args);
}
}