将MVC添加到ASP.NET网站

问题描述 投票:12回答:6

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

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

任何其他回复,我们都感谢。谢谢

asp.net asp.net-mvc asp.net-mvc-3
6个回答
8
投票

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

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

9
投票

使用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 Forms应用程序中添加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

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


1
投票

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

我没有做太多的尝试,但是过去出于好奇,我尝试过,并且网络表单仍然可以正常显示。我猜这取决于您的项目是否可以使用这种方法。

这将涉及更改项目类型。


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


0
投票

我的任务是更新(但遗憾的是不重写)旧版.Net 3.5,VB.NET(ughh)Web表单,网站项目,并且我成功升级到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子文件夹中使用剃须刀页面,但是我发现不错的是从.aspx页面向App_Code目录中定义的控制器进行AJAX调用,从而使我几乎可以将所有回发的应用程序现代化,和C#访问VB.NET书面数据层。


-1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.