У меня есть страница, на которой я пытаюсь использовать asp: ModalPopupExtender. Я использую всплывающее окно в качестве инструмента поиска, поэтому оно имеет пользовательский элемент управления с текстовым полем, кнопкой поиска, видом сетки и кнопкой ОК. Когда пользователь вводит поисковый запрос и нажимает кнопку «Поиск», происходит обратная передача, в результате чего всплывающее окно закрывается. Я не хочу, чтобы всплывающее окно закрывалось, пока пользователь не нажмет кнопку ОК. Я могу использовать всплывающее окно точно так же, как на простой странице, которая не имеет никакой другой функциональности, и она прекрасно работает. Я немного озадачен.
Любая помощь будет принята с благодарностью.
Вот код на странице, содержащей всплывающее окно.
<asp:Panel ID="ApplicationPicker" runat="server" CssClass="hidden">
<asp:Button ID="Button1" runat="server" Text="Search for Application" />
<asp:Label ID="ApplicationID" runat="server"></asp:Label>
<asp:Panel ID="Panel1" runat="server" CssClass="modalBackground" style="display:none;">
<appPicker:ApplicationPicker ID="thisAppPicker" runat="server" />
<asp:Button ID="btnOk" runat="server" Text="Ok" OnClick="OkButton_Clicked" />
<asp:Button ID="btnClose" runat="server" Text="Close Me" />
</asp:Panel>
<asp:ModalPopupExtender
DropShadow="true"
CancelControlID="btnClose"
runat="server"
PopupControlID="Panel1"
id="ModalPopupExtender1"
TargetControlID="Button1" />
</asp:Panel>
Вот пользовательский элемент управления выбора приложений. Все это внутри панели обновлений, но по какой-то причине этот редактор испортил формат кода с панелью обновлений в нем.
<asp:Panel ID="pDelegateBody" BackColor="White" runat="server">
<table>
<tr>
<td><asp:Label CssClass="indentedTextBold" ID="ApplicationSearchLabel" runat="server" Text="Search for:"></asp:Label></td>
<td><asp:TextBox ID="txtSearch" runat="server" Width="300px" Visible="true" /><asp:Label ID="ValidationLabel" runat="server" Text="Please enter at least 3 characters to search." ForeColor="Red" Visible="false"></asp:Label></td>
<td><asp:Button ID="btnSearch" runat="server" Text="Search" CssClass="Buttons" onclick="Search_Click" /></td>
</tr>
<tr>
<td colspan="4">
<asp:Panel ID="PanelProjectPicker" runat="server" Height="220px" Width="600px" ScrollBars="Vertical" BorderStyle="Solid" BorderWidth="1" BorderColor="GrayText">
<telerik:RadGrid ID="RadGrid1" runat="server" AllowSorting="False"
AutoGenerateColumns="False" CellPadding="0" DataKeyNames="LANID"
EnableEmbeddedSkins="false" onitemcommand="RadGrid1_ItemCommand"
ShowHeader="true" Skin="WF" ViewStateMode="Enabled" Width="580px" ClientIDMode="AutoID">
<MasterTableView Font-Size="X-Small">
<Columns>
<telerik:GridBoundColumn DataField="ApplicationID" HeaderText="ID" Visible="False" />
<telerik:GridBoundColumn DataField="Name" HeaderText="Display Name" SortExpression="DISPLAY_NAME" />
</Columns>
</MasterTableView>
<ClientSettings EnablePostBackOnRowClick="true" EnableRowHoverStyle="True">
<Selecting AllowRowSelect="true" />
</ClientSettings>
<HeaderStyle BackColor="#666666" Font-Names="verdana, arial" Font-Size="Small"
Height="20px" />
</telerik:RadGrid>
</asp:Panel>
<asp:Label ID="appID" runat="server"></asp:Label>
</td>
</tr>
</table>
и вот код для средства выбора приложений
protected void RadGrid1_ItemCommand(object source, GridCommandEventArgs e)
{
if (e.CommandName == "RowClick")
{
GridDataItem item = RadGrid1.Items[e.Item.ItemIndex];
appID.Text = item["ApplicationID"].Text;
}
}
protected void loadData()
{
if (Session["User"] != null)
{
currentUser = (User)Session["User"];
}
if (txtSearch.Text != "" && txtSearch.Text.Length > 2)
{
List<Application> AllApplications = new List<Application>();
if (UserController.IsUserWOT((User)Session["User"]))
{
AllApplications = BusinessUtility.GetApplications();
}
else
{
AllApplications = BusinessUtility.GetApplicationsByManagerLanId(currentUser.LanID);
}
List<Application> filteredApplications = new List<Application>();
filteredApplications = AllApplications.Where(x => x.Name.ToString().ToUpper().Contains(txtSearch.Text.ToUpper())).ToList();
if (filteredApplications.Count > 0)
{
RadGrid1.DataSource = filteredApplications;
RadGrid1.DataBind();
}
}
}
protected void Search_Click(object sender, EventArgs e)
{
if (txtSearch.Text.Length < 3)
{
ValidationLabel.Visible = true;
}
else
{
ValidationLabel.Visible = false;
RadGrid1.DataSource = "";
RadGrid1.DataBind();
loadData();
PanelProjectPicker.Visible = true;
}
}