为什么下拉选择永远不会在c#中触发

时间:2014-07-18 08:37:57

标签: c# asp.net drop-down-menu

我有一个搜索页面,名为: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);
}

现在,我可以看到下拉显示了!问题是当我点击一个选项时,它从不触发打开窗口的功能。我知道它不会去那个功能。那为什么会这样呢?我真的很困惑!

3 个答案:

答案 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)

我找到了答案,这不是因为下拉列表没有调用代码隐藏,而是因为代码隐藏中的变量是空的,所以它没有显示任何结果,我认为它没有被触发。要修复它,只需将变量设为全局(公共静态),并在更改每个方法后存储该值。