如何为ASP.NET文本框编写失去焦点方法?请问有没有人有这方面的想法并与我分享?
我知道大家都展示了基本的客户端方法,这很好,但我至少想展示一个处理特定客户端事件的服务器解决方案。
让我们来看看代码,并一步步地解析它。
由于ASP.Net TextBox没有为OnBlur暴露一个服务器端事件,您必须手动完成。幸运的是,这很容易实现。假设您在.aspx页面中有这段小代码。每当TextBox失去焦点时,您希望在服务器端更新一个Label控件。
<asp:Label ID="lblOnBlur" runat="server">On Blur Example</asp:Label><br />
<asp:TextBox ID="tbOnBlur" runat="server" ClientIDMode="Static" /><br />
<asp:Label ID="lblOutput" runat="server" />
ASP.Net内置了一个客户端函数,用于触发后台提交(postback),该函数有两个参数:
你可以通过在TextBox的标记中添加以下属性和值来直接将事件与后台代码绑定:
onblur="__doPostBack('tbOnBlur','OnBlur');"
然而,该框架有一个简单的方法可以为您生成服务器端的此脚本。在您的Page_Init方法中,只需添加对GetPostBackEventReference
的调用,并将其赋值给您控件的"onblur"属性,如下所示:
protected void Page_Init(object sender, EventArgs e)
{
var onBlurScript = Page.ClientScript.GetPostBackEventReference(tbOnBlur, "OnBlur");
tbOnBlur.Attributes.Add("onblur", onBlurScript);
}
通过使用标准的服务器控件事件,实现IPostBackEventHandler
接口,事件绑定和调用会自动处理。但对于一次性的解决方案来说,这是很多工作,所以让我们通过检查请求参数来手动处理它。
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
var ctrlName = Request.Params[Page.postEventSourceID];
var args = Request.Params[Page.postEventArgumentID];
HandleCustomPostbackEvent(ctrlName, args);
}
}
private void HandleCustomPostbackEvent(string ctrlName, string args)
{
//Since this will get called for every postback, we only
// want to handle a specific combination of control
// and argument.
if (ctrlName == tbOnBlur.UniqueID && args == "OnBlur")
{
lblOutput.Text = "On Blur Event Handled Server Side!" + DateTime.Now;
}
}
如果您不介意深入研究框架,模拟服务器端事件并不是非常困难。
希望这可以帮助到您!
祝好,
Josh
如果你想在文本框失去焦点后让服务器执行某些操作,可以添加AutoPostback="True"属性,如果你不想整个页面重新加载,可以使用一个UpdatePanel:
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:TextBox ID="TextBox1" runat="server" AutoPostBack="true"
OnTextChanged="TextBox1_TextChanged" />
</ContentTemplate>
</asp:UpdatePanel>
函数 TextBox1_TextChanged 然后可以对文本执行某些操作(服务器端)。
if (!Page.IsPostBack)
{
txtName.Attributes.Add("onblur","alert('Hello world')");
}
OnTextChanged="TextBox_TextChanged"
OnTextChanged
事件已经存在了,当文本框失去焦点时会触发该事件。 - Waqas Raja