将MVC添加到ASP.NET网站

时间:2011-08-25 17:22:35

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

我想将MVC支持添加到现有的网站项目(而不是Web应用程序项目),并且有一些问题。

  1. 要获得Visual Studio的MVC优点,我似乎需要更新.csproj文件的<ProjectTypeGuids>节点。网站项目中没有csproj个文件。
  2. 我似乎需要在Models中创建ControllersApp_Code文件夹。这是真的?我更喜欢在root下使用这些文件夹。
  3. 对于Views,我应该创建aspxaspx.cs个文件吗?在这种设置中是否支持cshtml razor文件?
  4. 感谢任何其他回复。感谢

6 个答案:

答案 0 :(得分:9)

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

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

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

这个特性的一个好处是,您不必具有运行MVC的特定项目类型。您只需要程序集,一些目录和一个经过调整的web.config。

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

以下是Wrox Professional ASP.NET MVC 1.0一本有助于您入门的详细说明:

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

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

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

2。向应用程序添加两个目录:控制器和视图。

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

作为参考,这里有几个博客/网站,它们有一些更详细的场景可能会帮助你:

Running ASP.NET Webforms and ASP.NET MVC side by side

Mixing ASP.NET Webforms and ASP.NET MVC

ASP.NET WebForms and ASP.NET MVC in Harmony

祝你好运,希望这会帮助你解决一些问题。

答案 1 :(得分:8)

我已成功将一个ASP.NET MVC 3添加到Webforms项目中,以下是一些建议:

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

答案 2 :(得分:0)

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

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

因此,您应用中的MVC网址可能如下:http://www.mywebsite.com/mycontroller.mvc/View/5

答案 3 :(得分:0)

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

我没有对此进行过多尝试,但我过去曾因好奇而尝试过网页表单仍然可以正常使用。我想这取决于你的项目的复杂性,这种方法是否有效。

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

答案 4 :(得分:0)

我的任务是更新(但遗憾的是没有重写)遗留的.Net 3.5,VB.NET(ughh)webforms,网站项目,我成功升级到4.0并添加了MVC3支持(带有单独的代码补充文件夹到支持C#,是啊!),它运行得很好。

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

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

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

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

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

答案 5 :(得分:-1)

ASP.NET MVC不支持网站模板,它只能是Web应用程序。因此,您无法将MVC功能添加到Web窗体项目中。