0

次のコードは私のページのマークアップです

<div id="addnewcontact">
    <fieldset style="width:70%;">
        <legend>Add New Contact Form</legend>
        <asp:panel runat="server" ID="custform" cssclass="contactform visible">
        "code removed for brevity"
            <asp:UpdatePanel ID="updtpanlCity" runat="server">
                <ContentTemplate>
                <!-- State dropdown selector area -->
                <asp:DropDownList ID="ddlStates" runat="server" AppendDataBoundItems="True"
                     AutoPostBack="True" CssClass="dropdowns" TabIndex="7" ToolTip="Select a state"
                    OnSelectedIndexChanged="ddlStates_SelectedIndexChanged">

                </asp:DropDownList>
                <asp:RequiredFieldValidator ID="rfvState" runat="server" ErrorMessage="[Required]"
                        ToolTip="Please select a state" ForeColor="#FF3300" ControlToValidate="ddlStates"
                        Display="Dynamic">
                </asp:RequiredFieldValidator>   
                <!-- End of State dropdown selector area -->
                <br /><p class="spacer"></p>
                <asp:DropDownList ID="ddlCity" runat="server" CssClass="dropdowns"
                        BorderColor="Black" BorderStyle="Solid" BorderWidth="2px"
                        TabIndex="8" ToolTip="Select a city here"
                        OnSelectedIndexChanged="ddlCity_SelectedIndexChanged"
                        AppendDataBoundItems="True" AutoPostBack="True">           
                        <asp:ListItem Value="" Text="Select a city"/>
                </asp:DropDownList>
                <br /><p class="spacer"></p>
                <asp:DropDownList ID="ddlPostalCode"  runat="server" TabIndex="9" 
                        CssClass="dropdowns" ToolTip="Select your postal code here."
                        AppendDataBoundItems="True" AutoPostBack="True">      
                        <asp:ListItem Value="" Text="Postal Code"/>
                </asp:DropDownList>&nbsp;&nbsp;
                <br />  

            </ContentTemplate>     
            <Triggers>
                <asp:AsyncPostBackTrigger ControlID="ddlStates" EventName="SelectedIndexChanged"/>
                <asp:AsyncPostBackTrigger ControlID="ddlCity" EventName="SelectedIndexChanged"/>
                <asp:AsyncPostBackTrigger ControlID="ddlPostalCode" EventName="SelectedIndexChanged"/>
            </Triggers>
            </asp:UpdatePanel>
            <br />

            <br /><p class="spacer"></p>
            <asp:Button ID="submit" runat="server" Text="Submit" CssClass="buttons" />

        </asp:panel> <%--end of custform panel--%>
    </fieldset>
</div>

状態ドロップダウンセレクターから状態を選択すると、コードは都市のリストを取得して都市ドロップダウンに入力する必要があります。これは以前は機能していましたが、データベース構造を変更したときにページを再構築しました。問題は、イベントハンドラーに配置したmsgbox行が、インデックス0の選択がそのイベントから常に返されるものであることを示していることですが、それはなぜですか?

Protected Sub ddlStates_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ddlStates.SelectedIndexChanged
    If IsPostBack Then
        MsgBox("item: " & ddlStates.SelectedItem.ToString() & "    " & "index: " & ddlStates.SelectedIndex.ToString())
        Dim ctx As New enerteckwebEntities()
        'retrieve the list of cities based on state selected
        Dim citylist As List(Of String) = (From c In ctx.ziptaxes Where c.StateID = Convert.ToInt32(ddlStates.SelectedValue) Order By c.City Ascending Select c.City).ToList()
        With ddlCity
            .Items.Clear()
            .DataSource = citylist.Distinct()
            .DataBind()
            .Items.Insert(0, "Select a city")
            .SelectedIndex = 0
        End With
    End If
End Sub

マークアップでautopostback、appenddatabounditems、enableviewstateをtrueに設定しています

4

1 に答える 1

1

これがあなたが試すことができる一つのことです。

  1. page_loadメソッドのif(!IsPostBack)条件でStatesドロップダウンをdatabindしていることを確認してください。これにより、SelectedIndexchangeイベントが発生したときにドロップダウンが再びデータバインドされないようになります。
于 2012-12-31T19:57:17.280 に答える