我有一个搜索页面,名为:search.ascx.cs和search.ascx;当用户搜索时,它将调用dosearch(),并在其中调用searchDatagrid.ascx.cs中的ReloadDetails()和DataBind_Results()函数。
现在,我在searchDatagrid.ascx
中创建了一个下拉菜单<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:DropDownList ID="DropDownList1" runat="server" Width="200px"
autopostback="true" OnSelectedIndexChanged="DropDownList1sel">
</asp:DropDownList>
</br>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</ContentTemplate>
但它会出错“只能将一个ScriptManager实例添加到页面中......” 所以我削减了这一部分:
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
并将其移至search.ascx文件。 对于下拉选项,我在searchDatagrid.ascx.cs文件中成功填充了它:
foreach (var standart in companies1.Select(c => c.compnStandards1).Distinct())
{
DropDownList1.Items.Add(new ListItem(standart));
}
并在用户选择下拉菜单中的选项时触发操作我也在searchDatagrid.ascx.cs文件中创建此测试函数:
public void DropDownList1sel(object sender, EventArgs e)
{
string url = "http://www.google.com";
string s = "window.open('" + url + "', 'popup_window', 'width=300,height=100,left=100,top=100,resizable=yes');";
Page.ClientScript.RegisterStartupScript(this.GetType(), "script", s, true);
}
现在,我可以看到下拉显示了!问题是当我点击一个选项时,它从不触发打开窗口的功能。我知道它不会去那个功能。那为什么会这样呢?我真的很困惑!
答案 0 :(得分:0)
拿走updatepanel并检查它是否有效。如果是,则在浏览器中启动调试会话。可能是js错误阻止了回发。测试Updatemode =以updatepanel为条件的条件。
答案 1 :(得分:0)
使用UpdatePanel
时,您必须使用此代码:
ScriptManager.RegisterStartupScript(
updatePanel // tells the page this control is updating the script
, updatePanel.GetType() // tells the type of the control updating
, Guid.NewGuid().ToString() // generates a unique key every request,
// so always update the script
, s
, true);
答案 2 :(得分:0)
我找到了答案,这不是因为下拉列表没有调用代码隐藏,而是因为代码隐藏中的变量是空的,所以它没有显示任何结果,我认为它没有被触发。要修复它,只需将变量设为全局(公共静态),并在更改每个方法后存储该值。