代码之家  ›  专栏  ›  技术社区  ›  John

回发不维护所选值

  •  0
  • John  · 技术社区  · 14 年前

    我有一个包含几个动态生成的下拉列表的页面。The DDs load and display the correct values on page load. 但是,当我尝试在回发时检索值时,DDS似乎都在维护页面加载时的值。

    全部在页面加载中创建; 无IsPostback测试; 处理的代码如下:

    void btnSubmit_Click(object sender, EventArgs e)
    
    {
    
    System.IO.StreamWriter sw = new System.IO.StreamWriter(Server.MapPath("\\") + "\\Logs\\Permissions.log",false);
    
    string szMask = hMask.Value.ToString();
    sw.WriteLine("\t\t\t\t\t\t\t" + szMask);
    
    foreach (Control c in Page.Controls)
        LoopControls(c, szMask, sw);
    sw.Close();
    }
    
    private void LoopControls(Control Page, string szMask, System.IO.StreamWriter sw)
    {
    
    foreach (Control c in Page.Controls)
    {
        if (c is DropDownList)
        {
            string szId = c.ID;
            if (szId.StartsWith("ddlPerm"))
            {
                string[] szSplit = szId.Split(':');
                int iMaskPosition = Convert.ToInt32(szSplit[1].ToString());
                int iSecurityPermissionID = Convert.ToInt32(szSplit[2].ToString());
                DropDownList dd = (DropDownList)c;
                string szPermission = dd.SelectedValue.ToString();
                if (szMask.Substring(iMaskPosition, 1) != szPermission)
                {
                    sw.WriteLine("NE");
                    if (iMaskPosition == 0)
                        szMask = szPermission + szMask.Substring(1);
                    else
                        szMask = szMask.Substring(0, iMaskPosition) + szPermission + szMask.Substring(iMaskPosition);
                }
                sw.WriteLine(szId + "\t\t" + iMaskPosition.ToString() + "\t" + iSecurityPermissionID.ToString() + "\t" + szPermission + "\t\t" + szMask);
            }
        }
        else
        {
            if (c.Controls.Count > 0)
            {
                LoopControls(c, szMask, sw);
            }
        }
    }
    }
    

    这真让我恼火。任何帮助都将不胜感激。

    谢谢, JB

    4 回复  |  直到 14 年前
        1
  •  4
  •   Billy    14 年前

    通常,这个问题可以通过

    if (!IsPostback){
    
    // bind all your dropdownlist here
    }
    

    否则,重新绑定后所选值将丢失。

        2
  •  2
  •   Anthony Pegram    14 年前

    viewstate在init和load事件之间维护。通过在加载期间创建和填充控件,您基本上是在处理完viewstate之后进入的。在init期间创建控件,您应该注意到回发值一直存在。

    有关生命周期每个特定阶段之间和每个特定阶段发生的事情的更多信息,请参阅此链接中的信息: http://msdn.microsoft.com/en-us/library/ms178472.aspx

        3
  •  2
  •   John K    14 年前

    正如你所说,问题可能是 No test for IsPostBack . 每次都可能覆盖值和状态。

    相反,测试ispostback,如果是真的,就不要写出来。

        4
  •  0
  •   Kevin LaBranche    14 年前

    全部在页面加载中创建;无测试 对于ispostback;处理 代码中

    如果不测试ispostback,则在每次加载页面时都会重新创建下拉列表。

    您需要测试ispostback,并且只在它不是postback时创建下拉列表。aka-第一次加载时。