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には、組み込みの クライアント側関数 があり、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;
}
}
最終的に、フレームワークを少し掘り下げてもかまわないのであれば、サーバー側のイベントをシミュレートするのはそれほど難しくありません。
お役に立てれば!
乾杯、
ジョシュ
テキストボックスがフォーカスを失った後にサーバーに何かをさせたい場合は、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')");
}
なぜそれを使用しないのですか。 Lostfocusは以下と同じように機能します:
OnTextChanged="TextBox_TextChanged"