ASP.NET更新パネルを使用して、テキストボックスのonTextChangedを使用してユーザー情報を取得しています。コードは次のとおりです。
<asp:UpdatePanel runat="server" ID="up1" ChildrenAsTriggers="true">
<ContentTemplate>
<asp:TextBox runat="server" ID="loginEmail" Text="Email"
CssClass="textBoxes" OnTextChanged="userInfo" AutoPostBack="true"></asp:TextBox>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="loginEmail" EventName="TextChanged" />
</Triggers>
</asp:UpdatePanel>
そして背後にあるコード:
string url, emailInfo;
emailInfo = loginEmail.Text;
url = Membership.GetUserNameByEmail(emailInfo);
emailText.InnerText = "Email: " + emailInfo;
urlText.InnerText = "Webiste: http://www.Elwazefa.com/User/" + url ;
コードはtextchangedでは起動しませんしかし、ButtonClickまたはPageLoadでは起動します。
何が問題ですか?
ASP.NET4.0の使用
<asp:TextBox AutoPostBack="true" OnTextChanged="thingId_TextChanged" ID="thingId" runat="server"></asp:TextBox>
AutoPostBack on text-boxは、テキストボックスからフォーカスが失われると、ポストバックをトリガーします。 TextChanged
イベントは、その後のポストバックで発生します(ボタンのクリックまたはテキストボックスのフォーカスの変更が原因である可能性があります)。だからあなたは確認する必要があります
私の推測では、あなたはおそらく#2に苦しんでいます。 Fiddler(またはFireFoxのFirebug)などのツールを使用して、テキストボックスからフォーカスが失われたときにブラウザーがAJAX(XHR)要求を実行しているかどうかを確認できます。
@VinayCが投稿したように、AutoPostBack
は、TextBox
がフォーカスを失ったときにページがサーバーにポストバックすることを意味します。組み込みのイベントがないため、テキスト入力に追加されたすべての文字にポストバックが発生しますが、これには正当な理由があります。 UpdatePanel
ポストバックによってページがちらつくことはありませんが、完全なポストバックと同じくらい重い場合があります。
これを回避したい場合は、テキストボックスにclientonchanged
イベントハンドラーを指定できます。そのJavaScriptはPage.ClientScript.GetPostBackEventReference()
から構築されます。
正しい解決策は、UpdatePanel
のonchanged
部分ポストバックではなく、JavaScriptコードからのAJAXメソッド呼び出しを使用することです。