【问题标题】:Can I use ASP.NET MVC together with regular ASP.NET Web forms我可以将 ASP.NET MVC 与常规 ASP.NET Web 表单一起使用吗
【发布时间】:2009-02-12 15:12:00
【问题描述】:

我应客户的要求使用 ASP.NET Web 表单构建了一个巨大的站点。问题是我发现 ASP.NET Web 表单有点不直观(仅我个人喜好)。所以我想做的是使用 MVC,但我真的不能指望我的客户为我的完全重写时间付费(他也没有时间)。

所以我要问的是,我能否同时使用 ASP.NET MVC 和 Web 表单,并逐渐越来越多地使用 MVC?有什么建议吗?

【问题讨论】:

    标签: c# asp.net .net asp.net-mvc


    【解决方案1】:

    2014 年更新:

    Visual Studio 2013 让我们更接近 One ASP.NET。 没有 MVC 不再是项目类型或 Web 窗体项目,只有 ASP.NET。如果 你想混合使用 Web 表单和 Web API,或者 MVC 和 SignalR,继续吧! 你受到鼓励和支持。新特性和功能是 在不破坏现有应用程序的情况下通过 NuGet 引入。

    VS 13

    因此,现在鼓励混合使用 Web 表单和 MVC(几乎可以无缝地工作),并且混淆了边界。我猜 MS 意识到有必要让项目慢慢迁移到 MVC,或者只是根据需要迁移部分,并获得两全其美。


    MVC 项目:

    已经将 MVC 与 Web 表单一起使用了很长一段时间,这当然是可能的,也是一个很好的选择。新功能和页面可以很容易地添加到具有良好架构设计的 MVC 页面中,例如 DDD(服务存储库、依赖注入等),而旧的东西可以保持原样。在 Web 表单页面中结合 MVC 也可以正常工作,尽管 JS 验证可能存在一些小问题。我强烈推荐它。

    从创建 MVC 应用程序 (5 atm) 开始相当容易,然后在您启动并运行基本模板后,将旧的 webforms 添加到文件夹中。通过这种方式,您可以正确获得新的 MVC 设置并保持向后兼容性。

    • 您可以创建一个 MVC 项目并将所有 Webforms 页面复制到例如一个文件夹。 (我想也可以升级一个项目)
    • 设置路由以忽略 URL 中具有该特定文件夹名称的请求。通过这种方式,MVC 和 Web 表单可以一起使用,而不会在 URL 中出现麻烦。
    • Asp.net WebForms aspx 页面可以驻留在 MVC 中,只要它们不放在 /Views 文件夹中。
    • 在旧语法上使用 Razor,您可以轻松自定义 HTML 帮助程序,而且更简洁。
    • 查看 MVC 标准和约定,控制器应该非常轻量级。它不是可以包含尽可能多的逻辑的代码隐藏。
    • 视图不应仅包含表示逻辑(无业务逻辑)
    • 一切新 => MVC
    • 资源、web.config 等可供双方使用
    • 菜单不使用 MVC 中的旧站点地图

    在 webforms .aspx 页面中使用 MVC:

    下面的文字旨在演示如何从 Web 表单页面中使用 MVC。 (例如在 MyPage.aspx 中)您可以在 Web 表单中使用 MVC 操作/视图,例如ajax 来填充页面的一部分或某些 div。

    包含 MVC 的 Web 表单可以正常工作,至少在 HTML 中添加 ajax 调用以填充来自 MVC 的 div 时。

    在 .aspx 中

    ..html & webforms code
    
    <div id="fillMeFromMVC">
      <script type="text/javascript">
       $.ajax(... call an MVC action to fill 
          the "fillMeFromMVC" div that this script sits inside of);
     </script>
    </div>
    

    这将通过 MVC 填充页面的一部分,您可以干净地执行您的 MVC,而不必担心 Web 表单中的操作。

    WebForms 与 MVC:

    到此为止,您可能已经很清楚这两种技术之间的差异了,但是这里是它们之间的一些比较。它们都有各自的目的和用途。我个人更喜欢 MVC 来完成我需要做的事情,但这可能取决于你想要实现的目标。

    如果您使用例如它们背后的 SOA,Web 表单和 MVC 页面都可以使用相同的业务逻辑。 当代码全部在页面后面并且与 UI 相关联(没有关注点分离)时,Webforms 可能是有害的。有了坚实的架构和一些可以减少的工作量。

    延伸阅读:

    Webforms vs. MVC (Code project)

    Difference betweeen ASP.NET WebForms and ASP.NET MVC (a blog)

    【讨论】:

    • 我认为你错了,因为 MVC RouteCollection 有这个名为 RouteExistingFiles 的设置,默认情况下是 false。这意味着如果您访问现有的 aspx 页面(并且它不位于 Views 文件夹中(本地 web.config 阻止对文件的直接请求访问),则应将其作为日常 WebForm 处理。
    • 好的,我不太确定这一点,我编辑了帖子。
    • @Iko:如果你不确定,你可以测试一下,对吧? :) 但我不是在谈论在 MVC 视图中嵌入 Web 表单服务器控件……我是说 Web 表单页面可以驻留在 MVC Web 应用程序中。因此,您显然误解了我的评论,因为您所做的是将 WebForms 页面与部分 Asp.net MVC 视图混合在一起。这是 OP 询问的另一件事。
    • @RobertKoritnik 很高兴知道,所以你可以做相反的事情(MVC 页面中的 Webforms)。然而,他询问是否在同一个项目中使用它们。我可以假设在某些时候他可能想要更新页面的一部分,在这种情况下,只需删除 webforms 部分并将其替换为 MVC 就很简单。假设他可以用 MVC 替换一些臃肿的复杂控件,这可以使用我建议的解决方案。他向我寻求提示,而我以前也这样做过,我认为这是他可能遇到的情况(尤其是当他指出他的偏好是 MVC 时)。
    • 将 web 表单放在 MVC 项目的文件夹中听起来像是一个干净的解决方案,但我无法理解它在共享资产(如脚本、图像、字体等)方面的工作原理......另外,在您的解释中不清楚如何导航到 Web 表单而不在 URL 中包含其包含文件夹。你能解释一下吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-08
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    相关资源
    最近更新 更多