web-dev-qa-db-ja.com

ASP.NETOnTextChangedが更新パネル内から起動しない

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の使用

10
Wahtever
<asp:TextBox AutoPostBack="true" OnTextChanged="thingId_TextChanged" ID="thingId" runat="server"></asp:TextBox>

AutoPostBack on text-boxは、テキストボックスからフォーカスが失われると、ポストバックをトリガーします。 TextChangedイベントは、その後のポストバックで発生します(ボタンのクリックまたはテキストボックスのフォーカスの変更が原因である可能性があります)。だからあなたは確認する必要があります

  1. テキストが変更された後、テキストボックスから移動します
  2. 変更するコントロールはすべて、更新パネルの一部です(異なる更新パネルにすることができます)。更新パネルの一部がない場合、それらの変更はクライアント側に反映されません。

私の推測では、あなたはおそらく#2に苦しんでいます。 Fiddler(またはFireFoxのFirebug)などのツールを使用して、テキストボックスからフォーカスが失われたときにブラウザーがAJAX(XHR)要求を実行しているかどうかを確認できます。

11
VinayC

@VinayCが投稿したように、AutoPostBackは、TextBoxがフォーカスを失ったときにページがサーバーにポストバックすることを意味します。組み込みのイベントがないため、テキスト入力に追加されたすべての文字にポストバックが発生しますが、これには正当な理由があります。 UpdatePanelポストバックによってページがちらつくことはありませんが、完全なポストバックと同じくらい重い場合があります。

これを回避したい場合は、テキストボックスにclientonchangedイベントハンドラーを指定できます。そのJavaScriptはPage.ClientScript.GetPostBackEventReference()から構築されます。

正しい解決策は、UpdatePanelonchanged部分ポストバックではなく、JavaScriptコードからのAJAXメソッド呼び出しを使用することです。

4
sq33G