1

ddlCountry ドロップダウンリストと ddlState ドロップダウンリストがあります。ddlState は更新パネルにあります。国を選択する際に、ddlCountry の selectedindexchanged イベントを使用してその州を設定しました。バインド後に両方のドロップダウンに開始値「-1」を追加し、ドロップダウンリストのコンテンツが[選択]値「-1」の場合はJavascriptをチェックインし、アラートを出してfalseを返します。

ただし、検証は ddlCountry に対して適切であり、ddlState に対しては、ajax 更新パネルが起動して検証が失敗した後、その値が「空白」になります。

どうすれば解決できますか? AsyncPostBackTrigger の後に ddlState 値が失われる理由がわかりません。

  //javascript validation

        function validateForm()
                {
                    if (ddlCountry .value == "-1")
                    {
                        alert("Country  should not be blank.");
                        ddlCountry .focus();
                        return false;
                    }
                    if (ddlState .value == "-1")
                    {
                        alert("State should not be blank.");
                        ddlState .focus();
                        return false;
                    }

                    return true;
                }
        //Aspx code
<asp:DropDownList ID="ddlCountry " runat="server" CssClass="csstextbox" Width="207px"
                                AutoPostBack="true"  OnSelectedIndexChanged="ddlCountry _SelectedIndexChanged">
                            </asp:DropDownList>
                 <asp:UpdatePanel ID="updatePanelState" runat="server">
                                                    <ContentTemplate>                               
                        <asp:DropDownList ID="ddlState " runat="server" CssClass="csstextbox" Width="177px">
                                                        </asp:DropDownList>
                                                    </ContentTemplate>
                                                    <Triggers>
                                                        <asp:AsyncPostBackTrigger ControlID="ddlCountry" EventName="SelectedIndexChanged" />
                                                    </Triggers>
                                                </asp:UpdatePanel>
            //Code Behind

    protected void Page_Load(object sender, EventArgs e)
        {
               if(!IsPostBack)
            {
                    BindCountry();
                    }
            }
            protected void ddlCountry_SelectedIndexChanged(object sender, EventArgs e)
                {       
                    int countryID = Convert.ToInt32(ddlCountry.SelectedItem.Value);

                    ifcountryID == -1)
                    {
                        return;
                    }

                    strSQL = @"SELECT State_ID,State_Desc
                                FROM State_Master 
                                WHERE countryID = '" + countryID + @"';

                    DataTable dataTableState = null;
                    dataTableState = objSqlDbComm.ExecuteDatasetQuery(strSQL).Tables[0];

                    var dictioneryState = new Dictionary<int, string>();
                    foreach(DataRow dr in dataTableStudy.Rows)
                    {
                        dictioneryState .Add(Convert.ToInt32(dr["State_ID"]), dr["State_Desc"].ToString());
                    }

                    ddlState.DataTextField = "Value";
                    ddlState.DataValueField = "Key";
                    ddlState.DataSource = dictioneryState;
                    ddlState.DataBind();
                    ddlState.Items.Insert(0, new ListItem("[Select]", "-1"));
                    ddlState.Items[0].Selected = true;          

                }
4

1 に答える 1

0

以下のように、両方のドロップダウンリストでビューステートをtrueに有効にします。

  <asp:DropDownList ID="ddlState " runat="server" CssClass="csstextbox" Width="177px" EnableViewState=true>                                                     </asp:DropDownList> 

それはあなたの問題を解決するかもしれません。

ありがとう

于 2012-05-17T07:15:20.937 に答える