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

Jam*_*123 26 c# vb.net asp.net

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

Jos*_*osh 37

所以我知道每个人都表现出了基本客户端的方法,这是好的,但我想至少说明了处理服务器上的特定客户端事件的解决方案.

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

由于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" />
Run Code Online (Sandbox Code Playgroud)

ASP.Net有一个内置的客户端函数,可以调用它来触发带有两个参数的回发:

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

可以通过将以下属性和值添加到TextBox中来标记事件的标记:

onblur="__doPostBack('tbOnBlur','OnBlur');"
Run Code Online (Sandbox Code Playgroud)

但是,该框架有一种简单的方法可以为您的服务器端生成此脚本.在你的Page_Init方法中,只需添加一个调用GetPostBackEventReference并将其分配给"onblur"属性,就像这样控制:

protected void Page_Init(object sender, EventArgs e)
{
    var onBlurScript = Page.ClientScript.GetPostBackEventReference(tbOnBlur, "OnBlur");
    tbOnBlur.Attributes.Add("onblur", onBlurScript);
}
Run Code Online (Sandbox Code Playgroud)

使用标准服务器控件事件,可以通过实现自动处理事件连接和调用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;
    }
}
Run Code Online (Sandbox Code Playgroud)

到底是不是非常难以模拟服务器端的事件,如果你不介意挖掘到框架一点点.

希望这可以帮助!

干杯,
乔希


Wil*_*lem 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>
Run Code Online (Sandbox Code Playgroud)

函数TextBox1_TextChanged然后可以对文本(serverside)执行某些操作.

  • 它重新加载整个页面,但只发送更新面板的html和一些javascript来更新响应中的内容.响应可能比下载整个页面小得多,浏览器不必重新呈现页面.这可以加快一点过程,用户不会注意到任何闪烁,体验更加顺畅. (4认同)
  • 怎么这不是公认的答案? (3认同)