【问题标题】:Adding MVC to a ASP.NET Website将 MVC 添加到 ASP.NET 网站
【发布时间】:2011-11-03 21:44:14
【问题描述】:

我想将 MVC 支持添加到现有网站项目(不是 Web 应用程序项目)并有几个问题。

  1. 为了获得 Visual Studio 的 MVC 优点,看来我需要更新 .csproj 文件的 <ProjectTypeGuids> 节点。网站项目中没有csproj 文件。
  2. 看来我需要在App_Code 中创建ModelsControllers 文件夹。这是真的?我更喜欢将这些文件夹放在根目录下。
  3. 对于Views,我应该创建aspxaspx.cs 文件吗?这种设置是否支持cshtml razor 文件?

感谢任何其他回复。谢谢

【问题讨论】:

  • 你需要切换到网络应用程序,AFAIK。
  • @SLaks - 我的理解是切换到网络应用程序是一种更简洁的方式,但不是必需的。

标签: asp.net asp.net-mvc asp.net-mvc-3


【解决方案1】:

对于 asp.net MVC2 及更高版本,MVC 团队将核心功能分为 三个不同的程序集,每个程序集都从通用 System.Web 程序集扩展而来:

  • System.Web.Routing
  • System.Web.Abstractions
  • System.Web.Mvc

通过这种分离,他们继续使程序集“在中等信任服务器环境中工作并且可以在 bin 中部署”。

此功能的好处之一是,您不必具有特定的项目类型即可运行 MVC。您只需要程序集、一些目录和经过调整的 web.config。

为此,您只需将程序集放在项目的本地 bin 文件夹中,并对这些程序集进行必要的引用。 完成此操作后,您就可以访问 asp.net MVC。

以下是Wrox Professional ASP.NET MVC 1.0 书中的一些详细说明,可以帮助您入门:

在现有的 Web 表单应用程序中包含 MVC

向现有的 Web 窗体应用程序添加 ASP.NET MVC 功能包括三个 不同的步骤:

1.添加对 ASP.NET MVC 需要的三个核心库的引用:System.Web.Mvc、System.Web.Routing 和 System.Web.Abstractions。

2.向您的应用程序添加两个目录:Controllers 和 Views。

3.更新 Web.config 以在运行时加载三个程序集以及注册 UrlRoutingModule HttpModule。

作为参考,这里有几个博客/网站,其中包含一些更详细的场景,可能会对您有所帮助:

Mixing ASP.NET Webforms and ASP.NET MVC

ASP.NET WebForms and ASP.NET MVC in Harmony

祝你好运,希望这对你有所帮助。

【讨论】:

  • 我确实将 MVC 添加到项目中,没有任何问题。但是,我的问题是关于让 Visual Studio 支持这个混合项目。看来这可以通过修改csproj 文件在网络应用程序项目中完成,但我还没有想出如何让它与网站项目一起工作。我还有其他前面提到的问题。
  • Razor 应该可以正常工作,但只是为了让事情看起来都一样,因为您已经在使用 .aspx 文件,我会继续使用 webform 视图引擎保留 MVC 视图。这可能更像是你的电话。对于使用 App_Code 目录,如果您使用的是直接网站,您可能必须将它用于模型和控制器。如果您继续更改为 Web 应用程序,所有内容都会被编译为单个 DLL,因此这些文件夹的去向并不重要。
  • 既然controllers文件夹需要在App_Code,有没有办法添加类库和网站工程的引用呢?如果可能的话,我想远离在App_Code 文件夹中添加任何内容。另外,知道如何整合Areas 的使用吗?
  • 由于使用 MVC,您只是调用方法而不是页面,因此拥有一个类库应该可以正常工作。现在地区的我不确定。我不知道你的项目有多大,或者你想把代码库带到哪里。作为一个即兴的答案,如果你现在可以做 MVC,你应该也可以添加区域,但我没有关于这方面的参考。
  • 这是一个相当大的项目(1000 个页面,100 个项目)。我在添加区域时看到的问题是区域需要自己的web.configAreaRegistration 类文件。由于我将其分离到不同的类库,它不喜欢web.config。此外,使用单独的类库,我必须像在控制器中那样引用 Session 对象。我的理解是我们不应该在类库中使用HttpContext,这不是一个好习惯。想法?
【解决方案2】:

我的任务是更新(但不幸的是不是重写)一个旧的 .Net 3.5、VB.NET (ughh) webforms、网站项目,我成功升级到 4.0 并添加了 MVC3 支持(带有单独的代码编译文件夹到支持C#,是的!),它工作得很好。

@DotnetDude 指令确实有效,但要注意几件事...

(1) 添加 Razor 支持时,这是在 Views/Web.config 文件中完成的,而不是在项目根目录中的 web.config 文件中完成。

(2) 如果您确实在 Views 目录之外添加了 Razor 文件(.chtml 或 .vbhtml),vs.net 将使用以下值更新您的根 web.config

<appSettings>
  <add key="webpages:Enabled" value="true" />
</appSettings>

不好。此设置允许直接浏览剃须刀页面,在我的情况下,当设置为 TRUE 时,会导致一切中断。话虽如此,我只在我的 Views 子文件夹中使用 razor 页面,但是我发现很好的是从我的 .aspx 页面向 App_Code 目录中定义的控制器进行 AJAX 调用,从而使我能够现代化一个主要是所有回发的应用程序,和 C# 访问 VB.NET 编写的数据层。

【讨论】:

    【解决方案3】:

    我已成功将 ASP.NET MVC 3 添加到 Webforms 项目,这里有一些建议:

    • Controllers 添加为单独的类库项目,并从 Web 表单 Web 项目中添加对该项目的引用
    • 我试图获得 VS MVC 支持(如 goto 控制器等),但将 GUID {E53F8FEA-EAE0-44A6-8774-FFD645390401} 添加到 .csproj 文件没有帮助。
    • 是的,您可以添加引用以从您的类库中获取会话。如果您想编写单元测试,您可以随时模拟它。
    • Views 文件夹添加到根目录
    • App_Code 中添加Models
    • 如果您使用的是 Razor,则需要添加 System.Web.RazorSystem.Web.WebPages 引用
    • 如果您使用的是 Razor,请根据此 post 更新 Web.config
    • 请记住,您可以将服务器控件添加到您的视图中,只要它们不使用回发(我的 webforms 项目中有很多服务器控件必须使用)

    【讨论】:

    • 使用虚拟路径进行监视。在我的网站上,当我尝试在其上添加 mvc 时,在此步骤之后它不起作用,只是因为我使用的是“。”在虚拟路径上(例如:“project.web”)。
    【解决方案4】:

    我相信如果您建立一个新的 MVC 项目并将您的 Web 表单复制到新项目中,它们将按预期呈现。

    我没有对此进行过多的试验,但出于好奇,我过去曾尝试过,并且 Web 表单仍然可以正常呈现。我想这取决于您的项目的复杂性,这种方法是否可行。

    这将涉及更改您的项目类型。

    【讨论】:

    • 现有项目确实很复杂。我可以将 MVC 项目添加到其中,但除非我真的需要,否则我不会创建新的 MVC 项目并将 webforms 项目复制到其中。如果我最终朝那个方向发展,您是否有资源可以提供帮助?
    【解决方案5】:

    如果您将 Global.asax 文件放在您网站的根目录中,我过去曾看到过这项工作。您需要一种方法让您的项目识别并区分 MVC 请求和标准请求,如下所示:

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.MapRoute("Default",
            "{controller}.mvc/{action}/{id}",
            new { controller = "Home", action = "Index", id = "" }
        );
    }
    

    因此,您的应用中的 MVC url 可能类似于:http://www.mywebsite.com/mycontroller.mvc/View/5

    【讨论】:

    • 是的,这是可能的。但是,我很想知道我是否可以在网站项目中获得 VS MVC 的优点(以及前面提到的其他问题)
    • 您不必区分 mvc 和 webform 请求。路由将自动确定要显示哪一个。如果 url 冲突,那么你可能需要改变一些东西才能工作。
    【解决方案6】:

    ASP.NET MVC 不支持网站模板,它只能是 Web 应用程序。所以你不能将 MVC 功能添加到 Web Forms 项目中。

    【讨论】:

    • 这不是真的。您可以将 MVC 添加到 Web 表单项目。 VS 工具可能无法正常工作,但如果您按照@chris 概述的简单步骤进行操作,MVC 将可以正常工作
    猜你喜欢
    • 1970-01-01
    • 2015-02-12
    • 1970-01-01
    • 2016-04-06
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    • 1970-01-01
    相关资源
    最近更新 更多