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

时间:2010-10-05 13:11:24

标签: c# asp.net vb.net

如何为asp.net文本方法编写丢失焦点方法?请任何人有任何想法写这个,与我分享?

4 个答案:

答案 0 :(得分:35)

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

让我们看一下代码,然后逐一讨论。

由于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,可以调用它来触发带有两个参数的回发:

  1. 目标(导致事件的控件的ID)
  2. 参数(您希望传递给服务器的可选信息)
  3. 可以通过在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;
        }
    }
    

    最后,如果您不介意深入挖掘框架,那么模拟服务器端事件并不是非常困难。

    希望这有帮助!

    干杯,
    约什

答案 1 :(得分:15)

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

答案 2 :(得分:4)

if (!Page.IsPostBack)
    {
        txtName.Attributes.Add("onblur","alert('Hello world')");
    }

答案 3 :(得分:0)

为什么不使用它。 Lostfocus的作用与:

相同
OnTextChanged="TextBox_TextChanged"