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

Posted

技术标签:

【中文标题】在 Asp.net C# 中创建动态控件,并缓存控件并绑定数据【英文标题】:Creating Dynamic Controls in Asp.net C#, and caching the controls and binding the Data 【发布时间】:2012-12-20 08:34:16 【问题描述】:

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

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

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

谢谢 尤格什

【问题讨论】:

【参考方案1】:

在你的初始化方法中添加下面的代码

if(!IsPostBack)

    //Put your control initzilation here and it will not be triggered on a PostBack

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

【讨论】:

【参考方案2】:

Page_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.IsPostback 不会有帮助,因为如果控件是像 ASPX code <asp:Panel ID="Panel1" runat="server"> </asp:Panel> <asp:Button ID="Button1" runat="server" Text="Button" /> C# protected void Page_Init(object sender, EventArgs e) if (!IsPostBack) TextBox txt = new TextBox(); txt.Text = "yeeelo"; Panel1.Controls.Add(txt); else 那样动态创建的,在回发时它不会在页面上显示控件 @DonYogesh 你只应该在 !Page.IsPostBack 中设置数据,而不是创建控件并添加它。 其实我不想重新创建回发控制。控件应仅在第一次创建,下次应从缓存或会话中获取。这可能吗? @DonYogesh 您可以在 !Page.IsPostBack 中执行 Session["txt"] = txt,然后在 if 之后执行 Page.Controls.Add(Session["txt"] as TextBox);。但我非常推荐 AGAINST 这样做:如果您将所有这些控件保持在会话中,您将对服务器 RAM 造成相当大的压力(因为只有在您这样做时它们才会被删除手动操作,否则用户超时。)由于使用 ViewState 存储变量的内容,每次再次创建控件可以减少服务器 RAM 的负载。 我的基本目标是让页面更快,因为创建动态控件和绑定数据需要很多时间。你有什么缓存技术可以让页面加载得更快【参考方案3】:

不是每次都必须创建它

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

一些开发人员建议您必须在 page_Preinit 中创建它,但您不会获得任何静态表格或面板控件,那么您在哪里添加控件?

【讨论】:

以上是关于在 Asp.net C# 中创建动态控件,并缓存控件并绑定数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# Asp.Net 中从相当复杂的 Json 响应中创建 Dto

在 asp.net c# 中创建 iPhone 推送通知 Web 服务

如何在asp.net c#中创建连接字符串

如何在 C# Asp.net MVC 中创建 websocket 客户端?

如何在 Asp.NET Core WEB API 中使用 .Net (C#) 在 Payload 中创建具有自定义 JSON 声明的 JWT 令牌

使用 C# 在 ASP.NET MVC 3 中创建级联下拉列表的最简单方法