gpt4 book ai didi

c# - 在 C# Web 应用程序而不是网站中动态加载用户控件

转载 作者:行者123 更新时间:2023-11-30 18:06:44 25 4
gpt4 key购买 nike

我正在尝试创建我自己的类似于 DNN/SiteFinity 的网站管理框架(只是一个大大简化的版本)。

其中一个重要(但常见)的特性是能够动态添加用户控件以提供额外的功能。

与动态编译的“网站”相比,我更愿意使用预编译的 .NET“Web 应用程序”。

使用 LoadControl 方法为预编译的 Web 应用程序动态添加用户控件的含义是什么,特别是:

  1. session (假设我正在使用状态服务器)
  2. 所有其他用户会怎样 - 他们会被注销吗?
  3. 由于某些编译的更改而导致应用程序池回收?

我不确定我是否曾经将用户控件动态添加到预编译的 Web 应用程序中,因为我一直主要使用“网站”,所以我假设它会起作用,因为如果网站是预编译的,这是否意味着即使站点是预编译的,动态添加的用户控件也会根据需要进行动态编译?

编辑

我还忘了提及用户控件将位于应用程序目录之外,因此不会在网络部署期间发布 - 它们将通过另一个网站上传。

谢谢!丹.

最佳答案

您可以在预编译网站中动态添加用户控件。

我给出一个关于用户控件生命周期的描述:

页面上的每个控件都有一个唯一的 ID,称为 ClientID。 (这是每个控件的实际属性。)用户控件是一个“命名容器”。这意味着它包含的每个控件还包含用户控件的 ID。例如,ID 为“UserControl1”的 UserControl 中的“TextBox1”将具有 clientID:UserControl1_TextBox1

回发通过 ClientID 从每个字段中检索值。例如,要从表单中获取上述 TextBox 的 值,请使用 Request.Forms["UserControl1_TextBox1"]。现在,当您将一个 UserControl 替换为另一个具有相同 ClientID 的控件时会发生什么?第二个获取第一个的数据。

建议:

  1. 始终在 ID 属性中为 UserControl 分配一个唯一 ID。

  2. 您应该始终重新创建您发送给在重新排列它们之前在 postback 上浏览器。这允许原始控件来加载它们的数据并运行它们的事件处理程序。它还允许 ViewState 正确分发其内容而不会出现 ViewState 损坏的错误。

  3. 所以在 Post_Back 上,我建议调用 LoadControl 来获取原始信息用户控件。然后在加载第二个之前,设置第一个的 Visible属性设置为 false 以将其删除。

关于c# - 在 C# Web 应用程序而不是网站中动态加载用户控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4542191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com