gpt4 book ai didi

asp.net-mvc - 在 MVC Razor View 中使用旧版 ASP.NET ASCX 用户控件

转载 作者:行者123 更新时间:2023-12-03 14:41:01 25 4
gpt4 key购买 nike

我正在尝试实现一个使用 WebForm ascx 用户控件(非 MVC)的 MVC Razor _Layout.cshtml 页面。我是根据 Scott Hansleman 文章“将 Razor View 和 WebForms 母版页与 ASP.NET MVC 3 混合”http://www.hanselman.com/blog/MixingRazorViewsAndWebFormsMasterPagesWithASPNETMVC3.aspx 的"is"部分执行此操作的。

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

从我读到的elsewhere on Stackoverflow可以在 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 暗示):

Control 'controlId' of type 'controlType' must be placed inside a form tag with runat=server.



如果你遇到这样的事情,你将不得不发挥创造力。修改用户控件以便它可以在 WebForms 和 MVC 中愉快地生活(用通用的 HTML 等价物替换有问题的控件 - 具有所有含义),或者复制它以便您拥有 WebForms 版本和 MVC 版本。

例如,您将不得不替换 <asp:TextBox ID="search"> 之类的内容。与 <input type="text" name="search" /> ,这意味着您还需要修改处理来自该输入的值的服务器端代码。基本上,您必须中性化用户控件,将其从用于体现 View 呈现逻辑和回发处理逻辑的东西转换为仅呈现 View 的东西。

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

关于asp.net-mvc - 在 MVC Razor View 中使用旧版 ASP.NET ASCX 用户控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7934319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com