我正在尝试实现一个使用 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(使用前将#替换为@)