文本框在另一个按钮回发后丢失值

时间:2014-02-10 00:27:20

标签: c# asp.net webforms

在我的页面上,我有3个文本框,其中包含标题,说明,提示和关键字的值。当我单击一个按钮时,它会将值插入数据库。当它回发时,值保留在文本框中,这就是我想要的。 页面的下一部分包含Question,CorrectAnswer,Wrong1,Wrong2,Wrong3的文本框。当我点击按钮将它们插入到数据库中时,这是有效的,并且在按钮触发其事件后,我将这5个文本框的文本值设置为null,因此我可以继续添加问题和答案。 但是当该按钮导致其回发时,第一个文本框中的值会消失,我不希望这样,因为我在标题文本框上进行了验证,因为您无法在文本框中添加任何没有标题的问题和答案。 那么当第二个按钮导致回发时,如何将值保留在第一个文本框中? 这是两个按钮的代码,btnAddQandA是导致回发的按钮..

protected void btnAddQuizTitle_Click(object sender, EventArgs e)
{

    daccess.AddQuizName(tbTitle.Text, taDescription.InnerText, taTips.InnerText, tbKeywords.Text);
    Session["TheQuizID"] = daccess.TheID;
    string myID = (string)(Session["TheQuizID"]);

    int theID = Int32.Parse(myID);

    if (tbKeywords.Text != null)
    {
        string TheKeywordHolder = "";
        foreach (ListItem LI in cblGrades.Items)
        {
            if (LI.Selected == true)
            {
                TheKeywordHolder = TheKeywordHolder + LI.Value + ",";
            }
        }
        daccess.AddQuizKeywords(theID, tbKeywords.Text);
    }

}

protected void btnAddQA_Click(object sender, EventArgs e)
{
    int theID = (int)Session["TheQuizID"];

    daccess.AddQuizQA(tbQuestion.Text, tbCorrect.Text, tbWrong1.Text, tbWrong2.Text, tbWrong3.Text, theID);
    tbQuestion.Text = null;
    tbCorrect.Text = null;
    tbWrong1.Text = null;
    tbWrong2.Text = null;
    tbWrong3.Text = null;
}

这是我的页面加载事件

DataAccess daccess = new DataAccess();
protected void Page_Load(object sender, EventArgs e)
{
    daccess.CblGradesDS();
    cblGrades.DataSource = daccess.DsCbl;
    cblGrades.DataValueField = "GradeID";
    cblGrades.DataTextField = "Grade";
    cblGrades.RepeatColumns = 8;
    cblGrades.RepeatDirection = RepeatDirection.Horizontal;
    cblGrades.DataBind();

    daccess.CblSubjectsDS();
    cblSubjects.DataSource = daccess.DsCbl2;
    cblSubjects.DataValueField = "SubjectID";
    cblSubjects.DataTextField = "SubjectName";
    cblSubjects.RepeatColumns = 4;
    cblSubjects.RepeatDirection = RepeatDirection.Horizontal;
    cblSubjects.DataBind();

    if (!IsPostBack)
    {

    }

}

1 个答案:

答案 0 :(得分:0)

这些问题通常是由回发之前和之后不匹配的控件ID(特定的UniqueID)引起的。这导致无法在视图状态中查找值。当您修改控件集合(通常在代码隐藏中)或更改控件的可见性时,会发生这种情况。当尚未填充viewstate时,在Page_Load事件之前修改ID时,也可能会发生这种情况。了解ASP.NET生命周期的工作原理很好。 http://spazzarama.com/wp-content/uploads/2009/02/aspnet_page-control-life-cycle.jpg