10

ASP.NET 更新パネルを使用して、テキスト ボックスの on TextChanged を使用してユーザー情報を取得しています。コードは次のとおりです。

<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.NET 4.0 の使用

4

2 に答える 2

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

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

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

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

于 2012-01-02T04:40:26.530 に答える
4

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

これを回避したい場合は、テキスト ボックスにクライアント onchangedイベント ハンドラーを与えることができます。その JavaScript は からビルドされPage.ClientScript.GetPostBackEventReference()ます。

正しい解決策は、JavaScript コードからの AJAX メソッド呼び出しを使用することUpdatePanelですonchanged

于 2012-01-02T07:20:30.150 に答える