单击radiobuttonlist后无法关闭jquery对话框?

时间:2012-04-20 20:02:28

标签: jquery asp.net

我正在使用jquery ui对话框,我已将其设置为具有文本框和按钮。 您基本上在文本框中键入内容并单击按钮,它从数据库中提取一些值并加载radiobutton列表。 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,是不是因为它被包装在updatepanel中?

如何获取值(点击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 个答案:

答案 0 :(得分:1)

txtShipToName不在UpdatePanel中,这就是它没有保持其值的原因。

要解决此问题,您可以将txtShipToName置于另一个UpdatePanel内,并将UpdateMode设置为Conditional,然后将其添加到您的代码中:

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

修改

正如ek_ny在答案中所述,最好将UpdateMode设置为始终用于新的UpdatePanel,然后您不需要在其上调用Update()

答案 1 :(得分:1)

对于您的第二个问题(编辑部分)--- txtShipName可能不在正在更新的更新面板中。您可以将txtShipName放在UpdatePanel中,并将其(UpdatePanel)UpdateMode设置为UpdateAlways。现在您的对话框正常工作 - 这也应该导致您的文本框更新。

答案 2 :(得分:0)

尝试使用此代码

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

当您执行ajax调用时,您丢失了单击处理程序,因为html在更新面板中被删除并重新生成。使用on方法解决了这个问题,因为在ajax回发之后创建新控件时会重新附加处理程序。

答案 3 :(得分:0)

也许这个例子很有用 http://jsfiddle.net/prJu7/

尝试使用

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

代替

 $('#dialog').hide();