0

jquery uiダイアログを使用していて、テキストボックスとボタンが表示されるように設定しています。基本的に、テキストボックスに何かを入力してボタンをクリックすると、データベースからいくつかの値が取得され、ラジオボタンリストが読み込まれます。HTMLマークアップは次のようになります。

 <div id="dialog" title="Select Address">
        <asp:UpdatePanel ID="upNewUpdatePanel" UpdateMode="Conditional" ChildrenAsTriggers="true" runat="server">
        <ContentTemplate>
            <div id="search" style="width:100%; text-align:center;">
                <asp:TextBox ID="txtFindSearch" runat="server"></asp:TextBox> 
                <asp:Button ID="btnFindSearch" runat="server" Text="Search" 
                    onclick="btnFindSearch_Click" />
                <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
            </div>
            <div id="searchresults" style="width:100%;">
                <asp:RadioButtonList ID="rbSearchResults" runat="server" AutoPostBack="True" 
                    CellSpacing="10" RepeatColumns="4" RepeatDirection="Horizontal" 
                    ToolTip="Select an address." 
                    onselectedindexchanged="rbSearchResults_SelectedIndexChanged">
                </asp:RadioButtonList>
            </div>
        </ContentTemplate>
        </asp:UpdatePanel>
        </div>

背後のコードでは、次のように選択した値を取得できます。

 protected void rbSearchResults_SelectedIndexChanged(object sender, EventArgs e)
        {
            Label1.Text = rbSearchResults.SelectedValue.ToString();
        }

私の問題は、ラジオボタンリストから選択した後、jqueryダイアログボックスを閉じる方法がわからないことです。私はjqueryでこのようなことをしようとしました:

  $('#MainContent_rbSearchResults input').click(function () {
       $('#dialog').hide();
   });

そこにアラートをスローしても、アラートは表示されません。ページソースを表示すると、divコンテナは表示されますが、radiobuttonlistが表示されません。これは、更新パネルにラップされているためでしょうか。

値を取得した後(radiobuttonlistをクリック)、jquery uiダイアログを閉じるにはどうすればよいですか?

編集

私はこれで試しました:

 protected void rbSearchResults_SelectedIndexChanged(object sender, EventArgs e)
        {
            Label1.Text = rbSearchResults.SelectedValue.ToString();
            this.txtShipToName.Text = Label1.Text;
            ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "closedialog", "$(function(){$('#dialog').dialog('close');});", true);
        }

これでダイアログが閉じますが、テキストボックスtxtShipToNameが値を取得することはありません。デバッグをステップスルーしても、値が割り当てられているのがわかります。

4

4 に答える 4

1

txtShipToNameUpdatePanel内にないため、その値を保持していません。

この問題を解決するには、UpdateModeをConditionalに設定してtxtShipToName別の内部に配置UpdatePanelし、これをコードに追加します。

Label1.Text = rbSearchResults.SelectedValue.ToString();
this.txtShipToName.Text = Label1.Text;
this.theNewUpdatePanel.Update(); //Add this line

編集

ek_nyが彼の答えで述べたように、新しいUpdatePanelに対して常にUpdateModeを設定することをお勧めします。そうすれば、それを呼び出す必要はありませんUpdate()

于 2012-04-20T20:14:23.120 に答える
1

2番目の問題(編集部分)の場合--- txtShipNameは、更新中の更新パネルにない可能性があります。txtShipNameをUpdatePanelに配置し、その(UpdatePanel)UpdateModeをUpdateAlwaysに設定できます。これでダイアログが機能するようになりました。これにより、テキストボックスも更新されます。

于 2012-04-20T20:21:29.347 に答える
0

このコードで試してください

$("#MainContent_rbSearchResult").on("click", "input", function(){
    $('#dialog').hide();
});

ajax呼び出しを行うと、更新パネル内でhtmlが削除および再生成されるため、クリックハンドラーが失われます。メソッドを使用onすると、ajaxポストバック後に新しいコントロールが作成されるときにハンドラーが再接続されるため、この問題を解決できます。

于 2012-04-20T20:09:23.433 に答える
0

多分この例は役に立つでしょう http://jsfiddle.net/prJu7/

使用してみてください

$('#dialog').dialog('close')

代わりは

 $('#dialog').hide();
于 2012-04-20T20:14:56.670 に答える