2016-12-14 10 views
0

内側のボタンにポストバックをトリガーない私はUpdatePanelのと2つのボタンを持つ単純なページがあります。jQueryのUpdatePanelの

<asp:Button ID="Button1" runat="server" ClientIDMode="Static" Text="Search" OnClick="UpdateSearchResults" /> 

<asp:UpdatePanel ID="UpdatePanel1" runat="server" ClientIDMode="Static" UpdateMode="Conditional" ChildrenAsTriggers="false"> 
    <ContentTemplate> 
     <asp:Button ID="Button2" runat="server" ClientIDMode="Static" Text="Search" OnClick="UpdateSearchResults" /> 
     <asp:PlaceHolder runat="server" ID="PlaceHolder1"></asp:PlaceHolder> 
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" /> 
     <asp:AsyncPostBackTrigger ControlID="Button2" EventName="Click" /> 
    </Triggers> 
</asp:UpdatePanel> 

いずれかのボタンをクリックすると、プレースホルダにコンテンツをレンダリングするサーバー、上の「UpdateSearchResults」を実行する必要があります。いずれかのボタンを手動でクリックすると、それほど良い結果が得られます。

しかし、jQueryを使用してButton2のボタンクリックをプログラム的にトリガすると、私はボタン1にまったく同じことをすれば、それを行うのに対し、

$("Button2").click(); 

、部分ポストバックは、起こりません。

私が試してみた:

すべてのClientIDを使用して、ボタンを選択すると、真

  • から
  • 設定ChildrenAsTriggersを( 'クリック').triggerで().click代入します無駄に。だからここで何が起こっているの?ボタンのクリックイベントをトリガーできますが、他のイベントはトリガーできないのはなぜですか?

  • +0

    てみてください'$("#Button2 ")。click();' –

    答えて

    0

    あなたの間違いは、あなたはIDセレクタを使用するように指定するセレクタの開始で#記号が欠けていることであり、コントロールがレンダリングした後、それは、ブラウザ上のクライアント側のIDとしてButton2のを持つことguarantedするされていませんClientIDModeスタティックを設定しない限り、私はそれを行うことを推奨しません。

    良い方法は、あなたのクライアント側のコードを失敗する魔法の文字列を使用して、ボタンを削除するか、それが名前だ変更した場合、将来的に時間のコンパイルエラーを引き起こしますコントロールのClientID Propertyを使用することです:

    $('#<%= Button2.ClientID %>').click(); 
    
    +0

    私はそれを逃したとは思わない! ClientIDプロパティのヒントも - 私は常にそれを使用することに抵抗してきました。あなたは私に、将来それを使う良い理由を与えました。 – Zute

    関連する問題