[英]Asp.NET user control referenced from another project/dll has NULL properties
尝试将常用自定义控件移动到新的类库(也尝试了新的Web项目),以便其他项目可以使用它,但在其他项目中使用时,其属性始终为NULL。 不幸的是,搜索类似的问题无助于解决我的问题。
我将web.base.config中的新控件注册到Project-A
<add tagPrefix="Controls" namespace="Comp.UserWebControls.Controls" assembly="Comp.UserWebControls" />
Comp.UserWebControls作为Project-A中的项目引用添加(我也尝试在Project-A中添加build dll作为引用,没有区别)
标记看起来像
<asp:Content ID="Content4" ContentPlaceHolderID="RightPlaceHolder" runat="server">
<Controls:uxMyControl ID="TestingThing" runat="server" />
在后面的代码中,实例化了“TestingThing”控件,但所有属性都为null(标签,文本框等)
通常,如果控件在同一个项目(Project-A)中,那么我会像这样注册控件:
<add tagPrefix="Contols" tagName="uxMyControl" src="~/Controls/uxMyControl.ascx"/>
在代码隐藏中,控件对象看起来很好,属性被实例化并按预期工作。
我在使用程序集时无法执行src="myPath"
,所以我认为这与它有关。
如何将此控件分离到新的装配/项目/解决方案,以便其他项目可以使用它。
任何帮助将不胜感激!
我不认为您可以使用User Control
(例如.ascx文件)并将其放入类库中以在不同的应用程序之间共享。
相反,您需要编写Custom Control
。 这基本上是一个类(一个cs文件,没有关联ASCX)从派生Control
(或变体Control
-例如,你可以从派生DropDownList
,如果你想使自己的自定义下拉列表控件)。
差异: https : //msdn.microsoft.com/en-us/library/aa651710(v = vs.71).aspx
这里还有另一篇MSDN文章: https : //msdn.microsoft.com/en-us/library/aa479318.aspx ,讨论如何在用户控件创建自定义控件的情况下如果您对它。
它概述了以下步骤:
- 像往常一样编写用户控件,通常使用Visual Studio设计器。
- 在尝试部署之前,使用简单页面对其进行测试。
- 部署应用程序以预编译它。
- 抓取部署步骤生成的用户控件的程序集,您基本上已完成:您拥有自定义控件。
- 最后,在其他应用程序中使用自定义控件的方式与始终使用自定义控件的方式相同。
如果你想拥有一组控件并且不希望每个控件都有一个单独的DLL,那么你可以使用反射器之类的反编译来查看生成的内容,然后将其复制/粘贴到共享控件的类库中。
然后,您应该能够注册tagPrefix和命名空间,如您所示: <add tagPrefix="Controls" namespace="Comp.UserWebControls.Controls" assembly="Comp.UserWebControls" />
你应该准备好了。
如果用户控件不是特别复杂,那么我可能会想要阅读有关纯代码Custom Controls
并尝试只是编写它而不是试图抓取和反编译DLL。
我认为你获得空值的原因很可能与viewstate和页面生命周期有关。 这总是我在Webforms中最挣扎的事情,特别是动态加载的控件,找出你应该在生命周期中加载它们的位置。 我似乎记得,例如,如果你在Page_Load
动态添加它们,它们似乎总是工作但是从不在回发中保持值,但是然后Page_Init
工作正常。
所以我会说 - 创建一个自定义控件,一个用于控件的单个类文件,摆脱.ascx
的任何痕迹,你应该好好去。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.