【问题标题】:update panel has does not work anymore更新面板已经不起作用了
【发布时间】:2012-09-11 18:00:50
【问题描述】:

我不确定这里发生了什么。但是我的页面上有一个更新面板,它正在填充 State 下拉列表 selecteditem 事件的 City 下拉列表。 它工作正常,但由于某种原因现在不行。它甚至没有弹出我在事件中作为第一行代码放置的消息框。

这是标记;

<!-- State dropdown selector area -->
        <asp:DropDownList ID="ddlState"  runat="server"
                          AppendDataBoundItems="True" CssClass="dropdowns"
                          BorderColor="Black"
                          BorderStyle="Solid" BorderWidth="2px" TabIndex="7" 
                          DataSourceID="EntityDataSource1" DataTextField="Name"
                          DataValueField="Id" ToolTip="Select a state here" AutoPostBack="True">
            <asp:ListItem Value="" Text="Select a state"/>
        </asp:DropDownList>
        <asp:EntityDataSource ID="EntityDataSource1" runat="server" ConnectionString="name=enerteckEntities"
             DefaultContainerName="enerteckEntities" EnableFlattening="False" EntitySetName="states"
             Select="it.[Name], it.[Id]">
        </asp:EntityDataSource>
        <asp:RequiredFieldValidator ID="rfvState" runat="server" 
                                    ErrorMessage="Please select a state from the dropdown list"
                                    Display="Dynamic" ControlToValidate="ddlState" 
                                    ForeColor="#FF3300">
        </asp:RequiredFieldValidator>
        <!-- End of State dropdown selector area -->
    <br /><br />
    <asp:UpdatePanel ID="updtPanelCity" runat="server">
        <ContentTemplate>
            <asp:DropDownList ID="ddlCity"  runat="server"
                              AppendDataBoundItems="True" CssClass="dropdowns"
                              BorderColor="Black"
                              BorderStyle="Solid" BorderWidth="2px" TabIndex="8" 
                               ToolTip="Select a city here" AutoPostBack="True">
                <asp:ListItem Value="" Text="Select a city"/>
            </asp:DropDownList>
            <asp:RequiredFieldValidator ID="rfvCity" runat="server" 
                                        ErrorMessage="Please select a city from the dropdown list"
                                        Display="Dynamic" ControlToValidate="ddlCity" 
                                        ForeColor="#FF3300">
            </asp:RequiredFieldValidator>
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="ddlState" EventName="SelectedIndexChanged" />
        </Triggers>
    </asp:UpdatePanel>

这是后面的代码;

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load

End Sub

Protected Sub ddlState_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ddlState.SelectedIndexChanged
    MsgBox("are you actually working")
    If IsPostBack Then
        ddlCity.Items.Clear()
        Dim context As New enerteckEntities()

        'Dim query = context.DistinctCityFromZiptax(Convert.ToInt16(ddlState.SelectedValue))
        Dim query = From c In context.ziptaxes Where c.StateID = ddlState.SelectedValue Order By c.City Select c.City, c.ZipTaxId
        ddlCity.DataSource = query.Distinct().ToList()
        ddlCity.DataValueField = "ziptaxid"
        ddlCity.DataTextField = "City"
        ddlCity.DataBind()
    End If

End Sub

我需要另一种眼光来解决这个问题。

编辑: 这是脚本管理器中的内容

 <asp:ScriptManager ID="ScriptManager1" runat="server">
    <Scripts>
        <%--Framework scripts--%>
        <asp:ScriptReference Name="MsAjaxBundle" />
        <asp:ScriptReference Name="jquery" />
        <asp:ScriptReference Name="jquery.ui.combined" />
        <asp:ScriptReference Name="WebForms.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebForms.js" />
        <asp:ScriptReference Name="WebUIValidation.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebUIValidation.js" />
        <asp:ScriptReference Name="MenuStandards.js" Assembly="System.Web" Path="~/Scripts/WebForms/MenuStandards.js" />
        <asp:ScriptReference Name="GridView.js" Assembly="System.Web" Path="~/Scripts/WebForms/GridView.js" />
        <asp:ScriptReference Name="DetailsView.js" Assembly="System.Web" Path="~/Scripts/WebForms/DetailsView.js" />
        <asp:ScriptReference Name="TreeView.js" Assembly="System.Web" Path="~/Scripts/WebForms/TreeView.js" />
        <asp:ScriptReference Name="WebParts.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebParts.js" />
        <asp:ScriptReference Name="Focus.js" Assembly="System.Web" Path="~/Scripts/WebForms/Focus.js" />
        <asp:ScriptReference Name="WebFormsBundle" />
        <%--Site scripts--%>

    </Scripts>
</asp:ScriptManager>

【问题讨论】:

    标签: asp.net drop-down-menu updatepanel


    【解决方案1】:

    1 您可以在 UpdatePanel 上添加 UpdateMode 属性。并设置为有条件的

    <asp:UpdatePanel ID="updtPanelCity"
                                     UpdateMode="Conditional"
                                     runat="server">
    
    ....
    

    2 并将您的 ddl 放在更新面板中

       <ContentTemplate>
          ....
         <asp:DropDownList ID="ddlState"  runat="server"
                              AppendDataBoundItems="True" CssClass="dropdowns"
                              BorderColor="Black"
                              BorderStyle="Solid" BorderWidth="2px" TabIndex="7" 
                              DataSourceID="EntityDataSource1" DataTextField="Name"
                              DataValueField="Id" ToolTip="Select a state here" AutoPostBack="True">
                <asp:ListItem Value="" Text="Select a state"/>
            </asp:DropDownList>
     </ContentTemplate>
    

    3 并在您的 dllState 上添加 OnSelectedIndexChanged=""

    【讨论】:

    • 母版页中有一个脚本管理器,所以它在这个页面的页眉中
    • 在同一个更新面板中?您应该能够从更新面板外部的控件调用更新面板刷新,不是吗?
    • 不行,必须在ContentTemplate中添加,更新面板的条件根据你自己定义
    猜你喜欢
    • 2014-07-30
    • 2012-08-30
    • 1970-01-01
    • 2017-01-31
    • 2010-10-13
    • 2018-05-05
    • 2011-11-07
    • 2010-10-17
    相关资源
    最近更新 更多