回发不维护选定的值

时间:2010-06-19 02:01:31

标签: c# asp.net

我有一个包含多个动态生成的DropDownLists的页面。 DD加载并在页面加载时显示正确的值。但是,当我尝试在回发后检索值时,DD似乎都在维护页面加载时的值。

所有都是在Page_Load中创建的; 没有测试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 个答案:

答案 0 :(得分:4)

通常,这个问题可以通过

来解决
if (!IsPostback){

// bind all your dropdownlist here
}

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

答案 1 :(得分:2)

问题可能在于,正如您所说No test for IsPostBack。您可能每次都会覆盖值和状态。

相反,测试IsPostback并且如果它是真的则不要写出它们。

答案 2 :(得分:2)

在Init和Load事件之间维护ViewState。通过在Load期间创建和填充控件,您基本上在ViewState已经处理完毕后进入。在Init期间创建控件,你应该注意到你的回发值不变。

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

答案 3 :(得分:0)

  

所有都是在Page_Load中创建的;没有考试   for IsPostBack;处理处理   在代码中

如果您没有测试IsPostBack,那么在每个页面加载时都会重新创建下拉列表。

您需要测试IsPostBack并仅在不是PostBack时创建下拉列表。 AKA - 第一次加载。