1

ドロップダウンリストからグループを選択してボタンをクリックし、ボタンをクリックして選択した値(group-id)をクエリ文字列で送信し、クエリ文字列のIDに基づいてページビューグループの詳細を表示すると、asp.netページのドロップダウンリストとボタンが表示されます。ドロップダウンリストからグループを変更すると、クエリ文字列にはまだ最後のIDと私のコードがあります

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack) FillList();

    if (Request.QueryString["id"] != null)
    {
        FillData();
        div_General.Visible = true;
        div_Special.Visible = true;
        dropdownlist1 .SelectedValue = Request.QueryString["id"];
    }
}

protected void button1_Click(object sender, EventArgs e)
{
    if (dropdownlist1 .SelectedIndex == 0)
    {
        par_ErrorMessage.InnerText = "choose group first  ...";
        par_ErrorMessage.Visible = true;
    }
    else Response.Redirect("Authority.aspx?id=" + dropdownlist1.SelectedValue);
}

ボタンをクリックして、ドロップダウンリストのページライフサイクルの新しい値が最初にページの読み込みに移動し、このコードであると仮定すると、この問題を理解しました

  dropdownlist1 .SelectedValue = Request.QueryString["id"];

button1_clickから読み取る前に、選択した値を最後の値に戻します

私のFillListメソッド

     private void FillList()
{
    oGroup = new Cls_Groups();
    cmb_Group.DataSource = oGroup.LoadGroups();
    cmb_Group.DataBind();

    cmb_Group.Items.Insert(0, "-- اختر مما يلي --");
}

助けが必要です

4

3 に答える 3

1

ページ読み込みイベント後のドロップダウンの値を選択できます

protected void Page_Load(object sender, EventArgs e)
{
   if (!IsPostBack) 
      {
        FillList();
        Viewstate["id"] = Request.QueryString["id"];
         if (Request.QueryString["id"] != null)
           {
            FillData();
            div_General.Visible = true;
            div_Special.Visible = true;

           }
      }
}

これで、Page_PreRenderで、次のようにドロップダウンで値を選択できます。-

protected void Page_PreRender(object sender, EventArgs e)
{
  if(!Page.IsPostBack)
 {
   if (ViewState["id"] != null)
      {
          dropdownlist1 .SelectedValue = ViewState["id"].ToString();
       }
  }
}

これがお役に立てば幸いです

于 2012-09-20T12:42:57.050 に答える
1

1つの回避策

aspxページに非表示フィールド(hiddenfield1)を作成し、page_Loadメソッドでこの変更を行います

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack) FillList();

    if (Request.QueryString["id"] != null)
    {
        FillData();
        div_General.Visible = true;
        div_Special.Visible = true;
        hiddenfield1.Value =  dropdownlist1.SelectedValue.text;
    }
}

ボディ内のaspxページにありませんtageはonload関数をon_loadabc()として登録します

今、この関数内でこれを行います

<script type="text/javascript">
function on_loadabc(){

var dd = document.getElementById('<%=dropdownlist1.ClientId %>');
var hdnfield = document.getElementById('<%=hiddenfield1.ClientId %>');
for (var i = 0; i < dd.options.length; i++) {
    if (dd.options[i].text === hdnfield.value ) {
        dd.selectedIndex = i;
        break;
    }
}


}
</script>

これがうまくいくことを願っています。

于 2012-09-20T13:16:00.980 に答える
0

filllist();ドロップダウン方法を間違えたと思います

FillList()ページのときにメソッドを呼び出しますisnotpostback が、ユーザーがドロップダウンの選択を変更するときにリダイレクトを実行している場合は、もちろんその時間は発生しないpostback ので、need to fill dropdown list again

if (!IsPostBack) FillList();

    if (Request.QueryString["id"] != null)
    {
        FillData();
        div_General.Visible = true;
        div_Special.Visible = true;
         FillList();
        dropdownlist1 .SelectedValue = Request.QueryString["id"];
    }
于 2012-09-20T12:43:40.730 に答える