加载动态创建的 ASCX 控件(通过代码)

2024-04-10

我正在创造Web User Controls通过代码(我的 C# 代码写出标记、代码隐藏和设计器文件在回调时写入磁盘)。控件创建得很好。我可以将它们添加到我的网络项目中并将它们放在页面上。

当我尝试使用加载控件时LoadControl(path)它说:

Unable to load type 'MyNameSpace.UseControlClass'

这是因为控件尚未编译。

但我的要求是动态加载控件而不重新编译解决方案。

如何只在创建控制文件时才编译用户控件?因为这似乎是唯一的出路。

EDIT:- 我的猜测是,由于该文件尚未编译,因此不允许运行时加载。我尝试使用编译代码文件CodeDom编译器。喜欢:

var filePath = Server.MapPath(path);
var provider = CSharpCodeProvider.CreateProvider("C#");
var opts = new CompilerParameters(new[] { "mscorlib.dll", "System.Web.dll", 
                              "Telerik.Web.Design.dll", "Telerik.Web.UI.dll", 
                              "Telerik.Web.UI.Skins.dll", "MyCurrentDll.dll"});
opts.GenerateExecutable = false;
opts.GenerateInMemory = true;
var cr = provider.CompileAssemblyFromFile(opts, new string[] { filePath+".cs" });

但它抱怨cannot find metadata file Telerik.Web.Design.dll我不想对 telerik 路径进行硬编码,因为它在托管系统中可能有所不同(尽管它位于bin当前网络应用程序的)。还MyCurrentDll.dll是我编译代码文件的文件的 dll。我该如何解决这个问题?

我的想法是编译代码文件创建一个dll动态并将其复制到Web应用程序的bin目录。它可能会解决我最初提出的问题。

EDIT 2:- 经过点击和试用后,我能够动态编译代码文件并生成dll。即使生成 dll 并将其放入bin我的应用程序我无法使用加载用户控件virtual path。我尝试过以下方法:

var asm = Assembly.Load("ddlPath");
var t = asm.GetType(fullTypeName);//NameSpace.Class
var ctrl = LoadControl(t,null);

此后将加载 ctrl。我分配它的Id属性并将其添加到asp.net Panel控制。但回发后就看不到了:(

现在我要么必须以某种方式使动态编译的 dll 类型可用于运行时(也许是应用程序域),这样当我使用虚拟路径加载控件时,它就会被正确加载,并且我不会得到HtmlParseException或者弄清楚为什么加载控制表单Type没有出现。

PS:-我已经加载了Label控制使用Type并且它工作正常。


最后我能够解决这个问题。以下是我采取的策略:

  1. 创建包含结构的文本文件CodeBehind, Markup and Designer code
  2. 阅读有关要创建哪些字段的信息。
  3. 为字符串生成器中所需的控件添加标记。
  4. 将一些其他相关信息放入更多字符串生成器中
  5. 写入文件

之后我创建了dll using CodeDome编译器。编译过程中遇到的主要问题,描述如下Edit问题的一部分是找不到引用的程序集,这是通过放置路径解决的bin目录的路径以及 dll 文件名,例如:

Server.MapPath("~/bin")+"\\Telerik.Web.dll"

etc.

下一个问题概述于EDIT2有点简单。有相当白痴。动态生成的用户控件中嵌入的另一个用户控件存在一些问题。

即使在此之后,我也无法将控件加载到编译代码的页面中。当我在另一个页面加载控件时,这个问题得到了解决。运行时能够解析动态编译的类型dll.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

加载动态创建的 ASCX 控件(通过代码) 的相关文章

  • 如何使用 ASP.NET MVC 编辑多选列表?

    我想编辑一个如下所示的对象 我希望用 UsersGrossList 中的一个或多个用户填充 UsersSelectedList 使用 mvc 中的标准编辑视图 我只得到映射的字符串和布尔值 下面未显示 我在 google 上找到的许多示例都
  • C free() 是如何工作的? [复制]

    这个问题在这里已经有答案了 可能的重复 malloc 和 free 如何工作 https stackoverflow com questions 1119134 how malloc and free work include
  • 并行化斐波那契序列生成器

    我正在学习并行化 在一项练习中 我得到了一些我应该提高性能的算法 其中之一是斐波那契数列生成器 array 0 0 array 1 1 for q 2 q lt MAX q array q array q 1 array q 2 我怀疑 这
  • 进程退出后 POSIX 名称信号量不会释放

    我正在尝试使用 POSIX 命名信号量进行跨进程同步 我注意到进程死亡或退出后 信号量仍然被系统打开 在进程 打开它 死亡或退出后是否有办法使其关闭 释放 早期的讨论在这里 当将信号量递减至零的进程崩溃时 如何恢复信号量 https sta
  • 司机和提供商之间的区别

    数据库中的驱动程序和提供程序有什么区别 有没有解释一下 不胜感激 样本 ADO NET driver for MySQL vs providerName System Data EntityClient 来自 MSDN 论坛 驱动程序是安装
  • C 中“complex”的默认类型

    根据我读过的文档 C99 和更高版本的支持float complex double complex and long double complex作为复杂类型 但是 此代码在使用时编译时不会发出警告gcc Wall Wextra inclu
  • 将日期时间转换为指定格式

    我有这个日期格式yy MM dd HH mm ss ex 12 02 21 10 56 09 问题是 当我尝试使用以下代码将其转换为不同格式时 CDate 12 02 21 10 56 09 ToString MMM dd yyyy HH
  • 如何在win32中使用GetSaveFileName保存文件?

    我编写此代码是为了获取 fileName 来保存我的文件 include stdafx h include
  • 在 C# 中何时使用 ArrayList 而不是 array[]?

    我经常使用一个ArrayList而不是 正常 array 当我使用时 我感觉好像我在作弊 或懒惰 ArrayList 什么时候可以使用ArrayList在数组上 数组是强类型的 并且可以很好地用作参数 如果您知道集合的长度并且它是固定的 则
  • Xamarin - SignalR 挂在连接上

    我正在尝试将我的 Xamarin 应用程序连接到托管在 Azure 上的 SignalR 后端 我遇到的问题是每次我在 HubConnection 上调用 StartAsync 时 它都会挂起客户端并且请求永远不会完成 我尝试通过应用程序进
  • Resharper:IEnumerable 的可能多重枚举

    我正在使用新的 Resharper 版本 6 在我的代码中的几个地方 它给一些文本加了下划线 并警告我可能存在IEnumerable 可能的多重枚举 我理解这意味着什么 并在适当的情况下采纳了建议 但在某些情况下 我不确定这实际上是一个大问
  • 如何使用 CSI.exe 脚本参数

    当你运行csi exe 安装了 Visual Studio 2015 update 2 您将得到以下语法 Microsoft R Visual C Interactive Compiler version 1 2 0 51106 Copyr
  • 如何在审计触发器中使用system_user但仍使用连接池?

    我想做以下两件事 在我的数据库表上使用审计触发器来识别哪个用户更新了什么 使用连接池来提高性能 对于 1 我在数据库触发器中使用 system user 来识别进行更改的用户 但这阻止我执行需要通用连接字符串的 2 有没有一种方法可以让我充
  • 如何将 int 作为“void *”传递给线程启动函数?

    我最初有一个用于斐波那契变量数组的全局变量 但发现这是不允许的 我需要进行基本的多线程处理并处理竞争条件 但我无法在 pthread 创建中将 int 作为 void 参数提供 我尝试过使用常量指针 但没有成功 由于某些奇怪的原因 void
  • 无法识别解决方案文件夹中的 Visual Studio 2017 Nuget.config

    我在使用 Visual Studio 2017 时遇到问题 新的解决方案不断引用 C Users yopa AppData Roaming NuGet Nuget config 中意外位置的 Nuget config 文件 我已将 nuge
  • 这种尺寸对齐是如何工作的

    对于所提供的评论 我无法理解以下代码 这段代码的作用是什么 以及等效的代码是什么8 aligned segment size must be 4 aligned attr gt options ssize 3 Here ssize is o
  • 将 Swagger 与命名空间版本的 WebApi 结合使用

    我已经找到了如何使用基于名称空间的 WebAPI 版本这个班 https aspnet codeplex com SourceControl changeset view dd207952fa86 Samples WebApi Namesp
  • 使用 C# 动态创建按钮并按预定义的顺序放置它们

    NET 4 5 C 创建 Windows 窗体 我想动态创建和添加按钮并为其分配单击事件 但希望它们以特定的方式动态放置 就像图像一样 我的问题是如何以上述方式动态放置按钮 即 4x4 格式 一行 4 个按钮 4 列 但行数不受限制 是否可
  • SQL Server“未找到网络路径”在不同环境中随机且不频繁地发生

    类似 如果不是同一个问题 随机遇到网络路径未找到异常 https stackoverflow com questions 38696448 network path not found exception encountered rando
  • C++ Boost ASIO 简单的周期性定时器?

    我想要一个非常简单的周期性计时器每 50 毫秒调用我的代码 我可以创建一个始终休眠 50 毫秒的线程 但这很痛苦 我可以开始研究用于制作计时器的 Linux API 但它不可移植 I d like使用升压 我只是不确定这是否可能 boost

随机推荐

  • Typescript 重写抽象方法,该方法返回 void

    abstract class Base abstract sayHello void class Child extends Base sayHello return 123 抽象方法的返回类型是void但我可以用数字类型返回来实现它 我没
  • 为什么我的 keras LSTM 模型陷入无限循环?

    我正在尝试构建一个小型 LSTM 它可以通过在现有 Python 代码上进行训练来学习编写代码 即使是垃圾代码 我已将数百个文件中的数千行代码连接到一个文件中 每个文件以
  • 在 Ubuntu 16.04 上安装 OpenCV 时出错

    我一直在尝试使用几个教程在 Ubuntu 16 04 上安装 OpenCV 但总是出现错误 这是我按照本教程得到的最后一个 https github com BVLC caffe wiki Ubuntu 16 04 or 15 10 Ope
  • Android VOIP 应用程序在 Doze 模式下的行为

    我正在 Android 上开发旧版 VOIP 应用程序 它目前不使用 Google Cloud Messaging 技术 只是永远保留自己的 TCP 连接 最近 谷歌推出了 Android M 预览版打瞌睡模式 https develope
  • UITextView beginOfDocument 返回 nil

    我必须获取包含在屏幕上的字符串的位置UITextView 为此 我尝试获取相应的 UITextPosition 问题是UITextView method beginningOfDocument回报nil 同样适用于endOfDocuemen
  • 如何在Python中从流(不是磁盘支持的文件)读取Excel文件?

    XLRD已安装并测试 gt gt gt import xlrd gt gt gt workbook xlrd open workbook Sample xls 当我通过如下所示的 html 表单读取文件时 我可以访问所有值 xls file
  • 我们如何解决 PagerTitleStrip 和 PagerTabStrip 中的空白标题?

    支持 v4 版本 23 0 0 的 PagerTitleStrip 和 PagerTabStrip 存在问题 的标题视图ViewPager使用时PagerTitleStrip or PagerTabStrip以及版本 23 0 0 用于 M
  • 如何使用Guice注射器?

    我正在学习Guice 但我不太清楚如何使用Injector实例 最好是创建Injector在应用程序引导程序上实例一次 并将其设为公共单例 我们是否总是必须使用Injector getInstance SomeClass class 去我们
  • 在 Android Studio 中使用 GameCircleSDK 时,多个 dex 文件定义了 Lcom/amazon/ags/BuildConfig

    我最近将 Android 项目从 Eclipse 导入到 AndroidStudio 中 一切都很顺利 我能够解决大多数问题 除了 GameCircleSDK 库模块的问题 我不断收到以下错误 UNEXPECTED TOP LEVEL EX
  • 如何获取文件 *.apk 在 Android 设备中的位置

    需要以编程方式从 Android 设备检索 apk 文件名的帮助吗 如果我只知道文件名的一部分 任何机构都可以提供一些 Android 方法来执行此操作 甚至可以在 Android 下运行 shell 命令来获取文件位置吗 另外 是否有一种
  • GroupBy 表达式翻译失败

    Model public class Application Key public int ApplicationId get set public DateTime CreatedAt get set public DateTime Co
  • 使用逻辑运算符进行 Laravel 表单验证

    当用户填写消息 文本区域 时 他 她无法填写日期 时间 地点值 仅当 Message 为空且所有这三个字段均已填充时 才会考虑这三个字段 如何使用 Laravel 表单验证来做到这一点 是否可以在Request的规则方法中定义这些逻辑 我是
  • 如何禁用部分 UISegmentedControl?

    以下是代码UISegmentedControl UISegmentedControl segmentedControl UISegmentedControl alloc initWithItems NSArray arrayWithObje
  • 来自 ISO8601 时间戳字符串的 Django 模型 DateTimeField

    这里是 Django 新手 我正在为带有字符串时间戳的 SQLite 数据库制作 Django 模型 例如2014 09 23T18 43 26 692Z 因为我想最终使用 Django 的过滤引擎进行查询 而不是使用strftime 我希
  • 如何获取故障转储

    我需要从程序中获取故障转储 我怎样才能得到它 该程序是用 C 编写的 故障转储到底是什么 它是什么时候创建的 它保存在哪里 我如何阅读它 既然你说的是 C 我假设你使用的是 Windows 平台 故障转储 或简称转储 是特定时间点进程的完整
  • Hibernate 抛出 HibernateQueryException:无法解析属性

    所以我有一个在休眠中定义为实体的表 如下所示 Entity Table name sec Preference public class Preference private long id Column name PreferenceId
  • 注册新成就:(#3502) 成就 URL 中的对象不是 game.achievement 类型

    我正在尝试为我的游戏添加新成就 当我尝试在 Graph API Explorer 上测试它时 我收到以下错误 3502 成就 URL 中的对象不是 game achievement 类型 我按照这篇文章 http developers fa
  • 在asp.net中使用doPostBack函数

    我想在我的链接中使用 doPostBack 函数 当用户单击它时 它不会重定向到另一个页面 并且页面将回发 我正在使用此代码 但它不起作用 我错过了哪里 lt a id Sample href javascript doPostBack P
  • 使用 GitHub 管理多个用户

    有人可以咨询我一件事吗 我们有一个项目 我们刚刚决定雇用更多程序员来完成它 到目前为止 我是唯一一个在 GitHub 上备份代码的程序员 但现在我需要找到一种安全的方法来管理多个程序员 因此 私有项目有一个主分支 其他程序员应该能够克隆它
  • 加载动态创建的 ASCX 控件(通过代码)

    我正在创造Web User Controls通过代码 我的 C 代码写出标记 代码隐藏和设计器文件在回调时写入磁盘 控件创建得很好 我可以将它们添加到我的网络项目中并将它们放在页面上 当我尝试使用加载控件时LoadControl path