在 MVC Razor 视图中使用旧版 ASP.NET ASCX 用户控件

2024-06-05

我正在尝试实现一个使用 WebForm ascx 用户控件(非 MVC)的 MVC Razor _Layout.cshtml 页面。我这样做是基于 Scott Hansleman 文章“将 Razor 视图和 WebForms 母版页与 ASP.NET MVC 3 混合”的“是”部分http://www.hanselman.com/blog/MishingRazorViewsAndWebFormsMasterPagesWithASPNETMVC3.aspx http://www.hanselman.com/blog/MixingRazorViewsAndWebFormsMasterPagesWithASPNETMVC3.aspx

本文介绍了如何在 Webform Site.Master 页面和 MVC Razor _Layout 页面中使用相同的 ascx 用户控件。

从我读到的Stackoverflow 上的其他地方 https://stackoverflow.com/questions/6538869/mvc3-razor-is-it-possible-to-render-a-legacy-ascx可以在 MVC 页面中使用旧版 ascx 用户控件(以及 ASP.NET Webform 服务器控件)。使用以下行应在我的 Razor _Layout 中呈现 ascx 用户控件:

@{ Html.RenderPartial("~/UserControls/WebUserControl1.ascx"); }

但是,这会引发错误:

The view at '~/UserControls/WebUserControl1.ascx' must derive from ViewPage,
ViewPage<TModel>, ViewUserControl, or ViewUserControl<TModel>.

我也尝试过以下方法,得到类似的结果:

@Html.Partial("~/UserControls/WebUserControl1.ascx")

我在这里缺少什么?


正如错误消息所述,用户控件“必须源自......ViewUserControl“。在用户控件的代码隐藏文件中,只需更改此...

public partial class WebUserControl1 : UserControl
{
    // ...
}

...对此:

public partial class WebUserControl1 : ViewUserControl
{
    // ...
}

ViewUserControl继承自UserControl,因此它将继续在您现有的 WebForms 页面中工作。

不过,为了让您的用户控件在 MVC 中工作,您可能还需要处理除这一问题之外的其他问题。至少我遇到的另外一个是(由SLaks https://stackoverflow.com/a/7934346/221708):

“controlType”类型的控件“controlId”必须放置在带有 runat=server 的表单标记内。

如果你遇到这样的事情,你就必须发挥创造力。要么修改用户控件,以便它可以在 WebForms 和 MVC 中愉快地共存(用通用 HTML 等效项替换有问题的控件 - 及其所有含义),要么复制它,以便您拥有 WebForms 版本和 MVC 版本。

例如,您将必须替换诸如<asp:TextBox ID="search"> with <input type="text" name="search" />,这意味着您还需要修改处理来自该输入的值的服务器端代码。基本上,您必须对用户控件进行中性化,将其从用于体现视图渲染逻辑的东西转换过来and回发处理逻辑,变成只渲染视图的东西。

You can做一个ascx控件可以很好地与 WebForms 和 Razor MVC 配合使用,对于页面页眉和页脚或数据的只读视图之类的简单内容,这是将应用程序迁移到 MVC 的好方法。但对于像输入表单这样更复杂的事情,维护和维护可能会更容易ascx用户控件和 MVC Razor 视图。

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

在 MVC Razor 视图中使用旧版 ASP.NET ASCX 用户控件 的相关文章

  • 显示 jQuery 验证摘要和单独的错误消息

    我在 ASP net MVC 中使用 jQuery 验证 除了控件之外 我想显示验证摘要以及单独的错误消息 我一次可以做其中一个 因此 了解如何同时显示两者将非常有帮助 我假设您正在寻找仅 JQuery 的解决方案 我不知道 ASP net
  • 通过浏览器获取操作系统中登录用户的用户名

    有没有可能通过网络浏览器从 os x 获取用户名 登录名 我的要求是 网络表单应通过电子邮件发送登录用户的姓名 用于内联网订阅课程 无需登录网站 这可能吗 绝对不是与所有操作系统上的所有浏览器兼容的方式
  • ASP.NET MVC (Razor) 与 Angular 5

    我们目前正在考虑从 ASP NET MVC 迁移到 Angular 5 主要是因为它看起来是最好 最新的框架 然而 我们似乎都无法找出为什么 Angular 比 MVC Razor 更好的硬道理 SPA 与 MPA 似乎是不同的方法 但实际
  • IIS 上的 ASP.NET MVC3 和 Windows Auth 不断重定向到 /Account/Login

    我正在运行 MVC3 和 Windows 身份验证 Web 应用程序 当我部署到 IIS6 时 它运行得很好 直到我遇到需要身份验证的页面 然后 当我在应用程序中没有任何痕迹并且我的 web config 配置为 Windows 身份验证时
  • 向表单提交添加附加参数

    我的 Razor 视图中有一个表单声明
  • 同一项目中的 Web 表单视图引擎和 razor 视图引擎

    我正在开发一个产品 到目前为止 该产品的所有视图都使用 Web 表单视图引擎 有太多文件需要重构 有什么原因导致我无法在同一项目中使用 razor 和 Web 表单视图引擎吗 ASP NET MVC 支持在默认配置的同一项目中使用 Razo
  • ASP.NET MVC 使用类型化模型将模型与单选按钮列表进行两种方式数据绑定

    我有一个由单选按钮矩阵组成的 mvc 视图 每行单选按钮都在一个组中 代表模型中的一个键入对象 使用各种博客和帖子的指导 我已成功将发布的表单结果绑定到控制器操作中的类型化模型数组 但是似乎无法成功反转效果并将现有模型绑定到单选按钮 同时保
  • ASP.NET MVC 最佳实施实践

    最近 我被要求完全重写和重新设计一个网站 该公司的所有者强调 他希望该网站采用最新 最先进的技术来制作 但要避免额外的成本 截至目前 我在研究 CMS 实现和使用 MVC 编写新实现之间左右为难 该网站主要是宣传册件 但需要允许访问者通过表
  • UrlHelper扩展方法调用编码未执行

    我为 ASP NET MVC UrlHelper 创建了一个简单的扩展方法 它不接受任何参数 因为它的工作是从配置中查找样式表文件的名称并返回样式表的 url 扩展方法大致如下 public static string SiteStyles
  • HTTP post 上的 MVC 模型子对象为 null

    希望可以有人帮帮我 我是 MVC 新手 来自 winforms console vb6background 抱歉 如果这个问题已经得到解答 我正在努力了解如何解决以下问题 我有一个视图模型 public class testvm publi
  • asp.net MVC - 如何通过不同的存储库类共享 SqlConnection 的同一实例

    我正在使用 MVC5 和普通 ADO NET 创建一个新项目 只是作为学习练习 我需要创建一个存储库 用于注册一个模型 其中包含几个也需要同时创建的相关对象以及这些对象反过来可能需要插入其他对象 我能想到的最简单的解决方案是拥有一个庞大的方
  • ASP.NET MVC HttpException 消息未显示在客户端上

    我正在使用 asp net mvc 构建 RESTful Web api 它返回纯 json 数据 在我的客户端上 我使用backbone js 与其进行通信 我的问题是 如何在 JavaScript 中捕获消息 例如 如果用户没有删除权限
  • 使用 MVC 5 RouteArea 属性时找不到默认区域视图

    我有一个包含多个区域的 MVC5 项目 我有一个默认区域 名为Default 并在其中有一个默认控制器 名为DefaultController 这可以通过站点路径访问 RouteArea public class DefaultContro
  • MVC 4 文本框未在回发时更新

    我有一个使用 modelview 对象的表单 该对象在提交表单的回发时不会更新文本框值 提交表单时 我编辑绑定到文本框的对象的属性 当表单返回时 对象属性仍然更改 但文本框值不会更改 这就像文本框值被缓存并且不会改变 我该如何解决 文本框默
  • 即使在不活动状态下,Hangfire 也会继续运行 SQL 查询

    我正在开发一个 ASP net MVC 5 网站 并使用 Hangfire 来安排一些任务 在本例中每 3 分钟一次 我知道一个事实是 运行这样的任务 以及与之相关的数据库查询 只需要几秒钟 我面临的问题是 Hangfire 似乎让我的 S
  • 在实体框架中不使用 Dispose 或 using()

    我一路上正在编写一个网络应用程序并学习实体框架 如果我做错了什么 我很好奇 我在查询时没有使用过 dispose 或 using 语句 我的存储库示例 public User GetUserById int sessionId var us
  • 类型违反了继承安全规则:“System.Net.Http.WebRequestHandler”

    我在 MVC 应用程序的 web config 中有以下程序集引用
  • " 是 JSON 字符串

    我有一个 JSON 字符串 当使用 Model JsonData 在 ASP NET MVC 页面中显示时 它看起来像这样 id 123 text Consumer parent 当我在 JavaScript 代码中使用相同的 Model
  • 配置的托管模块出现 Asp.net MVC 错误

    我有自定义身份验证HttpModule这是相当困难的 但我希望它仅针对托管请求运行 而不是静态请求 Asp net MVC 自动添加 IIS7 Web 服务器的配置部分
  • 将自定义 ValueProviderFactories 添加到 ASP.NET MVC3?

    我试图尝试将 Protobuf ValueProviderFactory 添加到 MVC3 以便我可以选择 MIME 类型并将原始数据反序列化为操作参数的对象 我还可以使用它来更改默认的 Json 序列化器 看着JsonValueProvi

随机推荐

  • 使用内部构造函数实例化类

    我有一个类 其构造函数被定义为内部 这意味着我无法实例化它 虽然这可能有道理 但出于调试和研究目的 我仍然愿意做一次 是否可以通过反射来做到这一点 我知道我可以访问私有 内部成员 但是我可以调用内部构造函数吗 或者 由于构造函数没有做任何重
  • Jetty 提供静态内容所需的最少文件集?

    背景 免责声明 I have veryJava 经验很少 我们之前在 Ant 构建期间使用了 Jetty 6 的包装版本来处理按需静态内容 JS CSS 图像 HTML 因此我们可以使用 PhantomJS 针对 HTTP 托管环境运行单元
  • 无法使用 VS 2019 构建 Web 应用程序

    我安装了 VS 2019 Pro 并尝试编译我们的解决方案只是为了得到这个 error MSB4226 The imported project C Program Files x86 Microsoft Visual Studio 201
  • Android/三星 Galaxy S 模拟器

    有没有办法在三星银河模拟器或类似的东西上尝试我的项目 我的项目在 HTC Legend 上运行 但在该设备上崩溃了 我如何在 android eclipse 上设置三星 Galaxy s 我设置了 W800 854 2 2 AVD 但它可以
  • 使用 ggplot 绘制函数,相当于 curve()

    是否有使用绘制函数的等效方法ggplot to the curve 基础图形中使用的命令 我想另一种选择是创建一个函数值向量并绘制一条连接线 但我希望有更简单的东西 Thanks 您可以使用以下命令添加曲线stat function ggp
  • 警告:从指针目标类型中丢弃“const”限定符

    没有const char s意味着 s 是一个指向常量 char 的指针 那么为什么它给我这个警告 我并不是想改变价值观 在第一个函数中警告是return discards const qualifiers from pointer tar
  • 如何使页面上的所有内容变大?

    如果我在浏览器中打开我的网站并按Ctrl 有几次 一切都变得更大 网站对我来说看起来更好 我可以通过在 HTML 代码中添加一些内容来实现相同的效果吗 以便用户默认看到更大的所有内容 而无需按Ctrl 我想让所有东西都变大 文本和图像 如果
  • 这是一种在 Akka FSM 中内部监视到第一个状态的转换的方法吗?

    考虑从状态 Idle 开始的 FSM actor startWith Idle IdleData 我想监视到第一个状态的转换 从无状态 I tried onTransition case gt Idle gt Wasn t called 根
  • JXA:写入文件时设置UTF-8编码

    如果我使用标准添加编写文本文件 显然我可以在参数包中配置编码 在AppleScript中我会写 class utf8 但是在JXA中使用哪个值 我尝试了字符串 UTF8 utf8 class utf8 但没有成功 错误始终是 错误 无法转换
  • 如何使用 C# 打印 pdf

    我在 C 应用程序中使用 进程 打印 pdf 文件 但是我无法获取打印状态 我发现可以通过 System management 和 System printing 与打印机 队列进行交互 我做了很多尝试 但都出错了使用这两个命名空间但无法打
  • 如何在 xcode 中从 nib 文件创建视图?

    我有以下代码来创建视图并将其放入滚动视图中以允许分页代码工作正常 但是我不能做的是从 nib 文件加载视图 换句话说 我想使用 initWithNibName 而不是 initWithFrame void createPageWithCol
  • 无法在 Android 中使用自定义数组适配器进行搜索?

    我无法从以下位置搜索listview 我尝试了各种方法 但它对我不起作用 没有错误 我有其他方式进行搜索 但我想让这种方式成为可能 这是代码 public class MainActivity extends Activity implem
  • 使用 grunt 编译具有不同变量的 LESS

    我有基于 Bootstrap 的 HTML 模板 有不同的颜色 红色 绿色等 颜色正在改变使用 brand变量在variables less 现在我转到这个文件 更改变量 编译 less 文件 进入已编译的 css 文件目录并重命名 CSS
  • 有没有一种方法可以在不安装在Web服务器上的情况下检查SSL数字证书是否有效?

    在将 CA 颁发的 SSL 证书安装到目标 Web 服务器上之前 是否有任何工具或机制可以帮助验证该证书 是的 您可以使用 openssl 通过 s server 命令为您的证书创建测试服务器 这将创建一个最小的 SSL TLS 服务器 用
  • 以编程方式 Godaddy 发送的电子邮件不在“已发送邮件”文件夹中 C#.net

    我正在通过以下方式发送电子邮件ASP NET代码使用godaddy邮件服务器 邮件发送成功 但未存储在已发送邮件文件夹中 我正在使用下面的代码 SmtpClient client new SmtpClient client Host smt
  • contenteditable 在 safari 中不起作用,但在 chrome 中起作用

    我有一个奇怪的问题 这在 chrome 中按预期工作 但在 safari 中它只会发光 但不会对按键输入做出反应 这是触发文本版本的方法 var namebloc event currentTarget find column filena
  • matplotlib:渲染到缓冲区/访问像素数据

    我想使用 matplotlib 生成的图作为 OpenGL 中的纹理 到目前为止 我遇到的 matplotlib 的 OpenGL 后端要么不成熟 要么已经停止使用 所以我想避免使用它们 我当前的方法是将图形保存到临时 png 文件中 并从
  • 在 XSSF 工作簿上设置密码保护

    我想为使用 poi 3 14 创建的 xlsx 文件添加密码保护 该文档声称 这是可能的 http poi apache org cryption html http poi apache org encryption html 使用我尝试
  • 使用 JPA 标准的“不在”约束

    我正在尝试写一个NOT IN约束使用JPA Criteria 我尝试过这样的事情 builder not builder in root get property1 虽然我知道这行不通 在上面的语法中 如何添加集合 列表property1会
  • 在 MVC Razor 视图中使用旧版 ASP.NET ASCX 用户控件

    我正在尝试实现一个使用 WebForm ascx 用户控件 非 MVC 的 MVC Razor Layout cshtml 页面 我这样做是基于 Scott Hansleman 文章 将 Razor 视图和 WebForms 母版页与 AS