我正在使用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永远不会获得值。即使我单步执行调试,我也会看到分配给它的值。
答案 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)