1

他の多くの人と同じように、JavaScript から .NET コントロールのサーバー側イベントを呼び出そうとしています。

TextChanged具体的には、という名前の TextBox でイベントを発生させたいと考えていますtxtSearch。したがって、クライアント側から次のイベントに到達しようとしています。

protected void txtSearch_TextChanged(object sender, EventArgs e)

SOに関する多くの回答を読んだ後(たとえば、ここここ)、次のJavaScriptがあります:

__doPostBack('ctl00$ctl00$Container$Main$txtSearch', 'TextChanged');

ただし、サーバー側のイベントは発生しません。

私は多数の順列を試しました: AutoPostBack true と false を使用し、ASPX のサーバー側の命令で宣言されたイベント (つまりOnTextChanged="") の有無にかかわらず、EventValidation をページ宣言でオフにし、ClientID を使用します。 EVENTTARGET パラメータの UniqueID ではなく...しかし、イベントはまだ発生しません。

他のいくつかのポイント

  • txtSearchボタン コントロールは、重要な場合に備えて、UpdatePanel のトリガーでもあります。
  • 非常に多くの既存のコードを変換しており、コード ビハインド イベントを PageMethods に変換するのではなく、各ページにドロップできるものを探しています。

さらに何をする必要があるか誰か教えてもらえますか?

4

2 に答える 2

1
function initTxtBox(){  $('#<%=txtBox.ClientID%>').on('keyup change', function() {setTimeout('txtpostback()', 0); return false;});}
function txtpostback(){__doPostBack('" + txtCadastreNumber.UniqueID + @"','');
Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(initTxtBox);

txtbox の auotpostback プロパティを false に設定し、コントロールまたはページ宣言の AutoEventWireup="true" を設定します。サーバー側の OnTextChanged イベントも機能します。プロジェクトで jquery を使用していない場合はお知らせください。jquery を使用しない JavaScript の例をいくつか示します。

于 2012-12-05T07:13:23.230 に答える
1

私はこれを試しましたが、私にとってはうまくいきます:

<asp:TextBox runat="server" ID="txtSearch" OnTextChanged="txtSearch_TextChanged"></asp:TextBox>
<input type="button" value="submit" onclick="<%= GetOnChangedScript() %>" />

サーバー側と、クリックでasp:TextBox起動するクライアント側。スクリプトは次の方法で生成されます。input__doPostBack__doPostBackPostBackOptions

protected string GetOnChangedScript()
{
    var options = new PostBackOptions(txtSearch, string.Empty);
    options.AutoPostBack = true;
    options.RequiresJavaScriptProtocol = true;
    var script = Page.ClientScript.GetPostBackEventReference(options);
    return script;
}

テキスト ボックスの値が変更され、ボタンがクリックtxtSearch_TextChangedされると、イベント ハンドラが起動します。submit

ただしTextBox、テキストなどのコントロールの場合、ビューステートに格納されることに注意してください。ユーザーが入力した新しいテキストは、フォーム データに保存されます。viewstateTextBoxデータをロードすると、古い値が取得されます。これは、フォームに含まれる新しい値と比較されます。値が異なる場合、TextChangedイベントが発生します。いいえの場合、イベント ハンドラーは起動されません。これが、Page_Loadイベントが発生した (ポストバックが発生した)理由ですtxtSearch_TextChangedが、 の値がTextBox変化しなかったために発生しませんでした。

于 2012-12-05T08:16:14.817 に答える