【问题标题】:Textbox losing value after another buttons postback另一个按钮回发后文本框失去价值
【发布时间】:2014-02-10 00:27:19
【问题描述】:

在我的页面上,我有 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)
    {

    }

}

【问题讨论】:

    标签: c# asp.net webforms


    【解决方案1】:

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

    【讨论】:

    • 谢谢,当我读到你关于 ids 的第一句话时,这是一个用引导程序完成的页面,当我阅读它并查看我的 cssclass 标记并意识到我必须更改它时因为他们是我的asp按钮和引导程序之间的冲突。所以我将 cssclass 更改为只使用样式,仅此而已,我让它工作了。感谢您提供的链接,它是一个很好的视觉辅助工具。
    猜你喜欢
    • 1970-01-01
    • 2016-04-22
    • 2011-08-17
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多