我在vb.net中创建了一组用户控件,在原始项目中它们工作正常。
我已经创建了一个用户控件库dll,我希望在新项目中使用它。
我添加对dll的引用,在asp.net页面中指定标签库,并在页面上定义控件。
除了没有渲染输出外,一切似乎都有效。
控件的各种属性和page_load方法都被调用。
Asp.net跟踪显示页面层次结构等中的控件
控件应该没有输出 - 任何建议?
我只比较了工作输出与非工作输出相比的痕迹。
工作输出包含用户控件(及其中的所有元素) 非工作输出仅列出用户控件 - 无内容
因此似乎控件的内容以某种方式丢失 - 好像标记没有使用代码隐藏编译,只有代码隐藏似乎正在工作。
控件继承自UserControl而非控件。
答案 0 :(得分:1)
我假设您在用户控件(.ascx)和自定义控件之间没有混淆。要使用户控件工作,需要ascx(标记文件)以及相应的代码隐藏类。用户控件通常由组成子控件组成,其子层次结构在提供某些UI的ascx文件中指定。在类库(dll)项目中,你不能打包ascx文件 - 你得到的只是代码隐藏类。如果没有ascx,代码隐藏类将不会有任何子控件,因此将呈现为空。简而言之,您无法将用户控件(ascx)打包到类库中 - 您必须将它们添加到实际的Web项目中。
对于共享控制,必须使用自定义控件。自定义控件是仅代码的,通常提供渲染覆盖,可以发出必要的html(或动态创建自己的子控件树)。这些控件可以作为类库打包并跨项目共享。通常,自定义控件还将具有其他辅助类以提供设计时辅助(UI编辑器等)。
答案 1 :(得分:1)
您在更新1-的摘要中是正确的,您的标记未包含在内!
如果你试图在.dll中分发.ascx控件,你需要提供一些肘部油脂,但不要太感激。
您需要做的两件事:
不幸的是,解释第2步有点冗长,但是this excellent article帮助我完成了你想要做的事情。
分发像这样的.ascx控件的美妙之处在于,你不必撕掉自己的头发来编写自定义控件(渲染任何东西而不是非常简单的html是一个噩梦才能理解)。