如何在ASP.NET Core中使用System.Web.UI.UserControl
ASP.NET Core 已完全移除传统 ASP.NET Web Forms 体系下的 UserControl 类型,没有直接等价的内置类,原有代码无法直接复用,需要根据原 UserControl 的实际业务场景选择对应实现方案。
原代码作用是将 oLogSite (object 类型)尝试转换为 UserControl 实例,目的一般是操作控件属性、方法或者获取其渲染输出,对应不同场景的实现方式如下:
场景1:原UserControl为可复用UI组件
如果原UserControl是用来封装公共UI片段,对应ASP.NET Core的两种实现方案:
- 简单无业务逻辑的UI复用:使用局部视图(Partial View)
把原UserControl的前端渲染逻辑迁移到.cshtml后缀的局部视图文件,需要渲染时调用@await Html.PartialAsync("你的局部视图名称", 传入的模型参数)即可。 - 带有独立业务逻辑的UI复用:使用视图组件(View Component)
- 新建继承自
ViewComponent的类,在InvokeAsync方法中编写业务逻辑、返回模型 - 配套编写对应的
.cshtml视图文件 - 需要渲染时调用
@await Component.InvokeAsync("你的组件名", 传入参数)即可。
- 新建继承自
场景2:后端动态生成控件并获取渲染HTML
如果原逻辑是在后端代码中动态创建UserControl实例、赋值属性后获取渲染后的HTML字符串,可以通过ASP.NET Core的 Razor 视图渲染服务实现:
- 基于官方的
IRazorViewEngineAPI封装视图渲染服务,传入要渲染的视图/组件名称、模型参数,即可直接获取渲染后的HTML字符串,无需操作控件实例。
类型转换逻辑的等价写法
如果你已经把原UserControl的逻辑封装为自定义类(比如名为LogSiteComponent),原类型转换代码可以替换为:
LogSiteComponent ctrl = oLogSite as LogSiteComponent;
你只需要根据自己封装的对应类型做转换即可。
内容的提问来源于stack exchange,提问作者Lakshm
相关产品推荐
相关产品推荐

