asp.net 文本框的丢失焦点方法?

Posted

技术标签:

【中文标题】asp.net 文本框的丢失焦点方法?【英文标题】:Lost Focus method for asp.net textbox? 【发布时间】:2011-04-21 07:20:36 【问题描述】:

asp.net文本方法的Lost focus方法怎么写?请问大家有什么好写的吗,分享一下?

【问题讨论】:

【参考方案1】:

所以我知道每个人都展示了基本的客户端方法,这很好,但我想至少展示一个在服务器上处理特定客户端事件的解决方案。

让我们看一下代码,然后逐个查看。

由于 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 有一个内置的client side function 被调用来触发带有两个参数的回发:

    目标(导致事件的控件的 ID) 参数(您希望传递给服务器的可选信息)

可以通过将以下属性和值添加到您的文本框来在标记中连接事件:

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;
    

最后,如果您不介意深入研究一下框架,那么模拟服务器端事件并不难。

希望这会有所帮助!

干杯, 乔什

【讨论】:

非常感谢 Genii 的精彩回答。您的帖子对我来说非常有用。 我已经看到了其他几个关于如何完成此任务的建议,而您的回答是迄今为止最好的。谢谢! 很好的答案,但是OnTextChanged 事件已经存在,当文本框失去焦点时触发。【参考方案2】:

如果您希望服务器在文本框失去焦点后执行某些操作,您可以添加 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 函数然后可以对文本做一些事情(服务器端)。

【讨论】:

不感兴趣-updatepanel如何停止整个页面的重新加载 @Kamal... 它没有。更新面板不会阻止整个页面加载到服务器上。基本上发生的事情是使用 XmlHttpRequest 在客户端执行回发,然后除了 UpdatePanel 的内容之外的所有内容都被丢弃并返回。它减轻了正常回发的“闪烁”,但没有节省服务器上的处理时间。 它重新加载整个页面,但只发送更新面板的html和一些javascript来更新响应中的内容。响应可以比下载整个页面小得多,并且浏览器不必重新呈现页面。这可以稍微加快处理速度,用户不会注意到任何闪烁,体验更加流畅。 当我按 Tab 键时文本框的焦点丢失,但仍然没有触发 onchange 事件 反正已经在使用更新面板了,只是忘记了 ontextchanged 我喜欢这个答案。 +1【参考方案3】:
if (!Page.IsPostBack)
    
        txtName.Attributes.Add("onblur","alert('Hello world')");
    

【讨论】:

【参考方案4】:

你为什么不使用它。 Lostfocus 适用于:

OnTextChanged="TextBox_TextChanged"

【讨论】:

但是如果你的值没有改变呢?那是行不通的

以上是关于asp.net 文本框的丢失焦点方法?的主要内容,如果未能解决你的问题,请参考以下文章