首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >回发后丢失数据的占位符

回发后丢失数据的占位符
EN

Stack Overflow用户
提问于 2018-06-08 00:38:29
回答 1查看 532关注 0票数 0

我正在将数据库表中的id号列表读取到占位符文本框中,但是,如果我这样做,单击一个按钮,数据就会被删除。

代码语言:javascript
复制
 protected void btnSearch_Click(object sender, EventArgs e)
    {

     while (myReader.Read())
        {


            TextBox txt = new TextBox();
            txt.Text = (string)myReader["idNumber"];
            txt.ID = "txt" + i;
            txt.ReadOnly = true;
            ContentPlaceHolder1.Controls.Add(txt);
            ContentPlaceHolder1.Controls.Add(new LiteralControl("     "));

            i++;
        }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-08 01:20:38

在web窗体中使用动态添加的控件时,这是一个常见的问题(特别是如果您来自winforms背景)。ASP.NET网页窗体中的页是无状态的,并在每次回发时重新构造。因此,如果在服务器事件期间将控件添加到页面,如果希望它出现,则还必须在后续页面加载时将其添加到页面。您可以使用类似于以下内容的内容来完成此操作:

代码语言:javascript
复制
protected List<Control> ControlCache
{
    get => (List<Control>)(Session["cachedControlsForPageX"] = (Session["cachedControlsForPageX"] as List<Control>) ?? new List<Control>());
    set => Session["cachedControlsForPageX"] = value;
}

/* If you can't use C# 7's expression bodied property accessors, here's the equivalent in blocks:
protected List<Control> ControlCache
{
    get { return (List<Control>)(Session["cachedControlsForPageX"] = (Session["cachedControlsForPageX"] as List<Control>) ?? new List<Control>()); }
    set { Session["cachedControlsForPageX"] = value; }
}
*/

protected void Page_Load(object sender, EventArgs e)
{
    if (Page.IsPostBack)
    {
        foreach (var control in ControlCache)
        {
            ContentPlaceHolder1.Controls.Add(control);
            ContentPlaceHolder1.Controls.Add(new LiteralControl("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"));
        }
    }
    else
        ControlCache = null;
}


protected void btnSearch_Click(object sender, EventArgs e)
{
    while (myReader.Read())
    {
        TextBox txt = new TextBox();
        txt.Text = (string)myReader["idNumber"];
        txt.ID = "txt" + i;
        txt.ReadOnly = true;
        ContentPlaceHolder1.Controls.Add(txt);
        ContentPlaceHolder1.Controls.Add(new LiteralControl("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"));
        ControlCache.Add(txt);
        i++;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50746291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档