1

当我从下拉列表中选择我的组并单击按钮时,我有 asp.net 页面下拉列表和按钮,然后按钮通过查询字符串发送选定的值(组 ID)然后基于查询字符串中的 ID 的页面查看组详细信息,这是第一次发生但是当我从下拉列表更改组查询字符串仍然具有最后一个 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

一种解决方法

在您的 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 页面中将 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 回答