0

DDLに別のDDLを入力していて、別のページから値を取得しています`

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        DropDownList1.DataSource = ProfileMasterDAL.bindcountry();
        DropDownList1.DataBind();
        DropDownList1.Items.Insert(0, "--Select country--");

    }


    if(Session["uname"]!=null)
    {
          DropDownList1.SelectedValue = Session["country"].ToString();
       ProfileMasterBLL bll=new ProfileMasterBLL();
        foreach (var VARIABLE in ProfileMasterDAL.bindcountry())
        {
            if (VARIABLE.ToString().Contains(DropDownList1.SelectedItem.Text))
            {
                var query = (ProfileMasterDAL.GetStatesByCountrys(DropDownList1.SelectedItem.Text));
                DropDownList2.DataSource = query;
                DropDownList2.DataBind();
             }
        }




        DropDownList1.SelectedIndex = DropDownList1.Items.IndexOf(DropDownList1.Items.FindByText(DropDownList1.SelectedItem.Text));

      DropDownList1.Items.FindByText(DropDownList1.SelectedItem.Text).Selected = true;
        string str = DropDownList1.SelectedItem.Value;

        DropDownList1.Items.FindByText(DropDownList1.SelectedItem.Text).Selected = true;

      var states = (new ProfileMasterDAL()).GetStatesByCountry(str);
      DropDownList2.Enabled = true;
        DropDownList2.Items.Clear();
        DropDownList2.DataSource = states;
        DropDownList2.DataBind();

    }



  <countrys>
  <country>
    <name>India</name>
    <state>
      <text>Maharashtra</text>
      <text>Kashmir</text>
      <text>Goa</text>
    </state>
  </country>
  <country>
    <name>Sri lanka</name>
    <state>
      <text>Kanady</text>
      <text>Colombo</text>
      <text>Galle</text>
    </state>
  </country>
  <country>
    <name> Australia</name>
    <state>
      <text>Sydney</text>
      <text>Perth</text>
      <text>Melbourne</text>
    </state>
  </country>
  <country>
    <name>South Africa</name>
    <state>
      <text>Capetown</text>
      <text>Johanusburg</text>
      <text>Durban</text>
    </state>
  </country>
  <country>
    <name>USA</name>
    <state>
      <text>Alabama</text>
      <text>California</text>
      <text>Detroit</text>
    </state>
  </country>
  <country>
    <name>UK</name>
    <state>
      <text>London</text>
      <text>Paris</text>
      <text>Italy</text>
    </state>
  </country>
</countrys>

奇妙な問題は、英国または米国などの他の国へのDDLを選択した場合、DropDownList1.SelectedItem.Text値は南アフリカ(セッションからの値)のままであり、南アフリカより上の国を選択した場合、DDLが入力されていないことです。その背後にある理由は何ですか?それに対する解決策や提案はありますか?

f (!IsPostBack)
        {
            DropDownList1.DataSource = ProfileMasterDAL.bindcountry();
            DropDownList1.DataBind();
            DropDownList1.Items.Insert(0, "--Select a country--");

        }
4

1 に答える 1

0

毎回DDLを再バインドするため、これは正常です.1回だけwaneする必要があります

if(! IsPostBack)
{
   //Just one time here

}

そして、Viewstate で DDL を永続化します

DDL にChandraAutoPostBack="true"を追加し、DDL に OnSelectChanged を追加できます。

データベースで、州が適切な国の名前にマップされていることを確認します

たとえば、DropDownList1.SelectedItem.Text == "USA"

var query = (ProfileMasterDAL.GetStatesByCountrys(DropDownList1.SelectedItem.Text));

州が適切な名前である USA にマップされていることを確認します。

于 2012-08-26T17:07:43.507 に答える