web-dev-qa-db-ja.com

asp.netテキストボックスのフォーカスメソッドを忘れましたか?

Asp.netテキストメソッドのロストフォーカスメソッドを書く方法は?誰かがこれを書いて、私と共有するアイデアを持っていますか?

26
James123

だから私は誰もが基本的なクライアント側のアプローチを示していることを知っていますが、それは問題ありませんが、少なくともサーバー上の特定のクライアント側イベントを処理するためのソリューションを示したかったです。

コードを見て、少しずつ調べてみましょう。

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には、組み込みの クライアント側関数 があり、2つのパラメーターを取るポストバックをトリガーするために呼び出されます。

  1. ターゲット(イベントを引き起こしたコントロールのID)
  2. 引数(サーバーに渡すオプションの情報)

次の属性と値をTextBoxに追加することで、マークアップでイベントをワイヤーアップするだけでcouldできます。

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 を実装することにより、イベントのワイヤリングと呼び出しが自動的に処理されます。これは、1回限りのソリューションでは多くの作業が必要になるため、要求パラメーターを調べて手動で処理するだけです。

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;
    }
}

最終的に、フレームワークを少し掘り下げてもかまわないのであれば、サーバー側のイベントをシミュレートするのはそれほど難しくありません。

お役に立てれば!

乾杯、
ジョシュ

37
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関数は、テキスト(サーバー側)で何かを実行できます。

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

なぜそれを使用しないのですか。 Lostfocusは以下と同じように機能します:

OnTextChanged="TextBox_TextChanged"
0
elfekz