疑问:AddWebPart 不能添加动态加载的自定义控件吗?
2007-08-19 09:30
633 查看
AddWebPart 不能添加动态加载的自定义控件吗?
做了一个自定义控件。强名称。动态加载添加到页面上是可以的。
Assembly asembly = Assembly.LoadFile(@"C:\Inetpub\wwwroot\WebApplication2\WebApplication2\UILib\MyWebControls.dll");
object obj = asembly.CreateInstance("MyWebControls.TestText");
con = LoadControl(obj.GetType(), null);
con.ID = "ddd";
this.Panel1.Controls.Add(con);
但是,如果添加到 WebPartManager里就会出问题:
Assembly asembly = Assembly.LoadFile(@"C:\Inetpub\wwwroot\WebApplication2\WebApplication2\UILib\MyWebControls.dll");
object obj = asembly.CreateInstance("MyWebControls.TestText");
con = LoadControl(obj.GetType(), null);
con.ID = "ddd";
this.WebPartManager1.AddWebPart( this.WebPartManager1.CreateWebPart(con), this.WebPartZone1, 0);
报错:
不能添加 MyWebControls.TestText 类型的控件。类型必须能够被 BuildManager.GetType(string typeName)加载。
请问这是怎么回事,怎么解决?肯请解答。多谢。
源码下载地址: http://ldhyyiqi.cn/upload/动态添加自定义用户控件到%20WebPart.rar
用Reflector 5.0 分析类 WebPartMananger 如下:(只贴主要代码)
WebPartManager :
2
3public WebPart AddWebPart(WebPart webPart, WebPartZoneBase zone, int zoneIndex)
4
8
9 WebPartManager :
10private WebPart AddDynamicWebPartToZone(WebPart webPart, WebPartZoneBase zone, int zoneIndex)
11
22
23
24WebPartManager
25
26protected virtual WebPart CopyWebPart(WebPart webPart)
27
48
49WebPartManager
50private void VerifyType(Control control)
51
65
66
67WebPartUtil:
68internal static Type DeserializeType(string typeName, bool throwOnError)
69
73
74
75BuildManager:
76public static Type GetType(string typeName, bool throwOnError)
77
81
82
83BuildManager:
84public static Type GetType(string typeName, bool throwOnError, bool ignoreCase)
85
136
137
分析到这里,就有很多问题了.
typeof(BuildManager).Assembly.GetType(typeName, false, ignoreCase);
这个函数是报错的.单纯的拿这个函数来讲, 我想在指定的程序集里创建对象,但这个函数没有指定程序集.所以只能说,走到这一步,是不对的.
对此,问题似乎有些眉目,如何让 AddWebPart 函数走正确的路.去正确创建.
顺带着的问题是. typeof(BuildManager).Assembly.GetType 这个函数如何使用.
暂时分析到这里.欢迎有相关经验的朋友提出宝贵意见。
问题解决。创建方法如下:
1.把DLL放到 BIN 文件夹下。
2.把生成的代码改为:
Type t = BuildManager.GetType("MyWebControls.TestText", true);
object obj = t.Assembly.CreateInstance("MyWebControls.TestText");
WebControl con = (WebControl)obj;
con.ID = "ddd";
Response.Write(t.FullName);
GenericWebPart gweb = this.WebPartManager1.CreateWebPart(con) ;
Response.Write( gweb.IsStatic ) ;
this.WebPartManager1.AddWebPart(gweb, this.WebPartZone1, 0);
现在,还不清楚是怎么回事。呵。让我给撞上了。哪位朋友给解释一下,BuildManager.GetType 的寻找路径方式?多谢。
如果我想把 DLL 文件放到自定义的文件夹下,该怎么办呢?
(需设置 AppDomainSetup.PrivateBinPath 。)
做了一个自定义控件。强名称。动态加载添加到页面上是可以的。
Assembly asembly = Assembly.LoadFile(@"C:\Inetpub\wwwroot\WebApplication2\WebApplication2\UILib\MyWebControls.dll");
object obj = asembly.CreateInstance("MyWebControls.TestText");
con = LoadControl(obj.GetType(), null);
con.ID = "ddd";
this.Panel1.Controls.Add(con);
但是,如果添加到 WebPartManager里就会出问题:
Assembly asembly = Assembly.LoadFile(@"C:\Inetpub\wwwroot\WebApplication2\WebApplication2\UILib\MyWebControls.dll");
object obj = asembly.CreateInstance("MyWebControls.TestText");
con = LoadControl(obj.GetType(), null);
con.ID = "ddd";
this.WebPartManager1.AddWebPart( this.WebPartManager1.CreateWebPart(con), this.WebPartZone1, 0);
报错:
不能添加 MyWebControls.TestText 类型的控件。类型必须能够被 BuildManager.GetType(string typeName)加载。
请问这是怎么回事,怎么解决?肯请解答。多谢。
源码下载地址: http://ldhyyiqi.cn/upload/动态添加自定义用户控件到%20WebPart.rar
用Reflector 5.0 分析类 WebPartMananger 如下:(只贴主要代码)
WebPartManager :
2
3public WebPart AddWebPart(WebPart webPart, WebPartZoneBase zone, int zoneIndex)
4
8
9 WebPartManager :
10private WebPart AddDynamicWebPartToZone(WebPart webPart, WebPartZoneBase zone, int zoneIndex)
11
22
23
24WebPartManager
25
26protected virtual WebPart CopyWebPart(WebPart webPart)
27
48
49WebPartManager
50private void VerifyType(Control control)
51
65
66
67WebPartUtil:
68internal static Type DeserializeType(string typeName, bool throwOnError)
69
73
74
75BuildManager:
76public static Type GetType(string typeName, bool throwOnError)
77
81
82
83BuildManager:
84public static Type GetType(string typeName, bool throwOnError, bool ignoreCase)
85
136
137
分析到这里,就有很多问题了.
typeof(BuildManager).Assembly.GetType(typeName, false, ignoreCase);
这个函数是报错的.单纯的拿这个函数来讲, 我想在指定的程序集里创建对象,但这个函数没有指定程序集.所以只能说,走到这一步,是不对的.
对此,问题似乎有些眉目,如何让 AddWebPart 函数走正确的路.去正确创建.
顺带着的问题是. typeof(BuildManager).Assembly.GetType 这个函数如何使用.
暂时分析到这里.欢迎有相关经验的朋友提出宝贵意见。
问题解决。创建方法如下:
1.把DLL放到 BIN 文件夹下。
2.把生成的代码改为:
Type t = BuildManager.GetType("MyWebControls.TestText", true);
object obj = t.Assembly.CreateInstance("MyWebControls.TestText");
WebControl con = (WebControl)obj;
con.ID = "ddd";
Response.Write(t.FullName);
GenericWebPart gweb = this.WebPartManager1.CreateWebPart(con) ;
Response.Write( gweb.IsStatic ) ;
this.WebPartManager1.AddWebPart(gweb, this.WebPartZone1, 0);
现在,还不清楚是怎么回事。呵。让我给撞上了。哪位朋友给解释一下,BuildManager.GetType 的寻找路径方式?多谢。
如果我想把 DLL 文件放到自定义的文件夹下,该怎么办呢?
(需设置 AppDomainSetup.PrivateBinPath 。)
相关文章推荐
- jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法
- jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法
- jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法
- jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法
- 懒加载的动态数组添加object需要self. 不能使用_
- jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法
- jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法
- jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法
- AD不能把用户添加到组排错经过(w32.spybot.worm的疑问?)
- MFC动态添加菜单并响应,优缺点(响应函数不能动态添加)
- 关于动态添加自定义控件的使用心得
- anjularJs 添加页面加载动态效果
- 安卓开发——为动态添加的EditText加载xml文档属性
- ASP.NET 动态添加自定义控件
- C# 自定义控件、用户控件、动态加载菜单按钮
- Android,在LinearLayout中动态添加TextView,几点疑问
- Jquery ajax在select中动态加载option并且添加点击事件
- 编译linux内核模块添加系统调用并动态加载
- 未能加载视图状态。正在向其中加载视图状态的控件树必须与前一请求期间用于保存视图状态的控件树相匹配。例如,当以动态方式添加控件时,在回发期间添加的控件必须与在初始请求期间添加的控件的类型和位置相匹配。
- SharePoint 2010, 自定义控件动态加载jQuery.