0

我到处寻找,但没有找到解决方案。希望您能提供帮助:

我正在维护一个用 VB.NET 编写并在 Framework 2.0 下运行的网站。

在我的一个页面中,我在 UpdatePanel 中有一个下拉控件:

<asp:UpdatePanel ID="pnlDropDown" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true">
        <ContentTemplate>
            <asp:DropDownList ID="ddlTest" runat="server" Width="400"
                OnSelectedIndexChanged="ddlTest_SelectedIndexChanged" AutoPostBack="true">
                <asp:ListItem Text="--- Please Select ---" Selected="True"></asp:ListItem>
                <asp:ListItem Text="111"></asp:ListItem>
                <asp:ListItem Text="222"></asp:ListItem>
                <asp:ListItem Text="333"></asp:ListItem>
            </asp:DropDownList>
        </ContentTemplate>
    </asp:UpdatePanel>

在这个控件的处理程序中,我调用了 ScriptManager.RegisterStartupScript:

Protected Sub ddlTest_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs)
    ScriptManager.RegisterStartupScript(Me, GetType(Page), "Test", "alert('Test'); ", True)
End Sub    

现在这是我的问题:当我从下拉列表中选择一个值时,“RegisterStartupScript”方法将不起作用,但它仅在项目在 IIS 6 和 Framework 2.0 下运行时才会发生。- 如果我将其更改为在 IIS 7 下运行,它可以完美运行。- 如果我将其更改为在 Framework 4.0 下运行,它可以完美运行。- 如果我删除 UpdatePanel 部分,它可以工作。

但是,如果我不改变任何东西,它就不会做任何事情。

在我更改整个代码以使用 jquery 和 ajax 之前有什么解决方案吗?:)

谢谢,

奥瑞特。

4

1 回答 1

0

这是我为了避免使用 RegisterStartupScript 而找到的解决方法。它很简单,而且效果很好:

  1. 我在 UpdatePanel 中添加了一个名为“hdnTest”的隐藏字段:

    <asp:UpdatePanel ID="pnlDropDown" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <asp:HiddenField ID="hdnTest" runat="server" />
        <asp:DropDownList ID="ddlTest" runat="server" Width="400"
            OnSelectedIndexChanged="ddlTest_SelectedIndexChanged" AutoPostBack="true">
            <asp:ListItem Text="--- Please Select ---" Selected="True"></asp:ListItem>
            <asp:ListItem Text="111"></asp:ListItem>
            <asp:ListItem Text="222"></asp:ListItem>
            <asp:ListItem Text="333"></asp:ListItem>
        </asp:DropDownList>
    </ContentTemplate>
    

  2. 在服务器端,我在控件处理程序内的隐藏字段中插入了一个值:

    Protected Sub ddlTest_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs)
        If x Then
            hdnTest.Value = "true"
        Else
            hdnTest.Value = "false"
        End If
        pnlDropDown.Update()
    End Sub 
    
  3. 在客户端,我添加了一个 pageLoad() 函数,它获取隐藏字段的值并根据它进行操作:

     function pageLoad(){            
        if ($("#hdnTest").val() == "true") 
            alert('true');             
        else
            alert('false');               
     }
    

效果很好。

奥瑞特。

于 2013-06-20T07:44:06.573 回答