【问题标题】:Why don't my user controls render?为什么我的用户控件不呈现?
【发布时间】:2011-11-25 01:41:50
【问题描述】:

我在 vb.net 中创建了一组用户控件,并且在他们的原始项目中它们运行良好。

我已经创建了一个用户控件库 dll,我希望在新项目中使用它。

我添加对dll的引用很好,在asp.net页面中指定标签库很好,并在页面上定义控件。

一切似乎都正常,除了我没有得到渲染输出。

控件的各种属性和page_load方法都被调用了。

Asp.net 跟踪显示页面层次结构中的控件等

只是没有输出控件应该在哪里 - 有什么建议吗?

更新 1

我只是比较了工作输出与非工作输出的痕迹。

工作输出包含用户控件(以及其中的所有元素) 非工作输出仅列出用户控件 - 没有内容

因此,控件的内容似乎以某种方式丢失了 - 好像没有使用代码隐藏编译标记,只有代码隐藏似乎在工作。

更新 2

控件继承自 UserControl 而不是控件。

【问题讨论】:

  • 如果您没有向我们显示任何代码,则无法为您提供帮助。显示页面背后的标记或代码,它可以工作和不工作的页面......
  • 如果您的意思是您的控件继承自 UserControl 而不是 Control,那么您需要做一些额外的工作来将它们分发到库中。如果是这种情况,请编辑您的帖子,以便我提供准确的答案。
  • @WiseGuyEh - 是的,我继承自 UserControl,已更新帖子

标签: asp.net user-controls


【解决方案1】:

您在更新 1 中的总结是正确的 - 您的标记未被包括在内!

如果您尝试在 .dll 中分发 .ascx 控件,则需要提供一些麻烦,但谢天谢地。

你需要做的两件事主要是:

  1. 嵌入了您的 .ascx 控件。 .ascx 控件需要在您的 .dll 中标记为嵌入资源(与“内容”相对)
  2. 创建一个 VirtualPathProvider。这将允许您直接从它们嵌入的 dll 中加载 ascx 文件。

不幸的是,第 2 步的解释有点冗长,但是 this excellent article 帮助我完成了您想做的事情。

像这样分发 .ascx 控件的美妙之处在于,您不必费力地编写自定义控件(除了非常简单的 html 之外,渲染任何东西都是一场噩梦)。

【讨论】:

    【解决方案2】:

    我假设您不会混淆用户控件 (.ascx) 和自定义控件。要使用户控件正常工作,需要 ascx(标记文件)和相应的代码隐藏类。用户控件通常由组成子控件组成,其层次结构在提供一些 UI 的 ascx 文件中指定。在类库 (dll) 项目中,您不能打包 ascx 文件 - 您得到的只是代码隐藏类。如果没有 ascx,代码隐藏类将没有任何子控件,因此将呈现为空。简而言之,您不能将用户控件 (ascx) 打包到类库中 - 您必须将它们添加到您的实际 Web 项目中。

    对于共享控件,必须使用自定义控件。自定义控件是纯代码的,通常提供渲染覆盖以发出必要的 html(或动态创建自己的子控件树)。这些控件可以打包为类库并跨项目共享。通常,自定义控件还将具有其他帮助类来提供设计时帮助(UI 编辑器等)。

    【讨论】:

    • 不,我不知道其中的区别,这就解释了输出不足的原因。
    猜你喜欢
    • 2011-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多