在Asp.net C#中创建动态控件,并缓存控件和绑定数据

在Asp.net C#中创建动态控件,并缓存控件和绑定数据,c#,asp.net,caching,dynamic-controls,C#,Asp.net,Caching,Dynamic Controls,我正在创建动态控件,如文本框,在页面_Init中的下拉列表。创建控件后,我将数据绑定到控件。当页面回发发生时,我必须重新创建控件并重新绑定数据 是否有任何方法可以缓存动态创建的控件并将最新数据更新到该控件。例如,我创建文本框,然后将值设置为“abc”,当有回发时,我不想再次重新创建文本框,或者只想从缓存中获取控件,并想将最新值(如“xyz”)更新到该文本框 基本上是第一次创建控件,缓存控件并在回发时将最新数据绑定到控件 谢谢 Yogesh在您的init方法中添加下面的代码 if(!IsPostB

我正在创建动态控件,如文本框,在
页面_Init
中的下拉列表。创建控件后,我将数据绑定到控件。当页面回发发生时,我必须重新创建控件并重新绑定数据

是否有任何方法可以缓存动态创建的控件并将最新数据更新到该控件。例如,我创建文本框,然后将值设置为“abc”,当有回发时,我不想再次重新创建文本框,或者只想从缓存中获取控件,并想将最新值(如“xyz”)更新到该文本框

基本上是第一次创建控件,缓存控件并在回发时将最新数据绑定到控件

谢谢
Yogesh

在您的init方法中添加下面的代码

if(!IsPostBack)
{
    //Put your control initzilation here and it will not be triggered on a PostBack
}

您需要使用其他逻辑来更改需要更改的控件的txt值。

页面上创建控件时,OnInit
方法应注意保留其数据的控件

如果您也在代码中设置数据,请确保将它们封装在

if (!Page.IsPostBack)
{
    //set data here
}
这样可以确保只在第一次设置数据,而不是每次都重写


编辑:

作为更完整的示例:

protected void Page_OnInit(object sender, EventArgs e)
{
    TextBox txt = new TextBox();
    //create more controls
    if (!Page.IsPostBack)
    {
        txt.Text = "initial value";
    }
    Page.Controls.Add(txt);
    //add other controls
}

不,每次你都要创造它

我不知道,但我认为这是微软的错误或其他东西,但你必须创造它的每一次


一些开发人员建议您必须在page#Preinit中创建它,但您不会得到任何静态表或面板控件,因此您在哪里添加了控件?

page.IsPostback不会有帮助,因为如果控件像ASPX
code
C#
protectedvoid page#Init那样动态创建(对象发送方,事件参数e){如果(!IsPostBack){TextBox txt=new TextBox();txt.Text=“yeeelo”;Panel1.Controls.Add(txt);}否则{}}
在回发时,它将不会在上显示控件page@DonYogesh您只能在中设置de数据!Page.IsPostBack,不创建控件并添加它。实际上,我不想在回发时重新创建控件。控件只应在第一次创建,下次应从缓存或会话中获取。这可能吗?@DonYogesh您可以在!Page.IsPostBack,然后在if do
Page.Controls.Add之后添加(会话[“txt”]作为文本框)。但我强烈建议不要这样做:如果您将所有这些控件保持在会话中,您将对服务器RAM造成相当大的压力(因为只有在手动操作或用户超时时,这些控件才会被删除)。再次创建控件,可以减少服务器RAM上的负载,由于使用ViewState存储变量的内容,我的基本目标是加快页面速度,因为创建动态控件和绑定数据需要花费大量时间。您是否有任何缓存技术,以便页面加载更快