当前位置:  开发笔记 > 编程语言 > 正文

您如何将ASP.Net MVC纳入现有网站项目?

如何解决《您如何将ASP.NetMVC纳入现有网站项目?》经验,为你挑选了4个好方法。

我在Visual Studio 2008 SP1中有一个遗留(哈哈) ASP.Net Webforms 网站项目,我想逐步介绍一些MVC功能.

我可以找到关于如何将ASP.Net MVC与WebForms集成的大部分信息似乎都假定使用Web应用程序项目.但是,似乎无法找到有关如何使用ASP.Net MVC功能改进现有ASP.net网站项目的信息.

我已经回顾了Scott Hanselman的帖子以及他即将出版的书中的第13章,这两本书都假设了Web Application Project类型.

这可能吗?有没有人有这方面的方法?



1> Kyle LeNeau..:

对于初学者来说,将MVC添加到webforms项目非常简单,要获得VS 2008 for MVC中的功能需要更多的工作(仍然很容易).首先,您要确保引用程序集并使用.Net 3.5.其次,您可以在当前的Web表单项目中创建一个controllers文件夹和views文件夹.您还可以使用索引操作创建一个简单的控制器.然后在global.ascx文件中设置/配置路由.你应该从那里开始.点击这里查看参考.

但是,您只能使用代码隐藏创建aspx页面(您可以删除它们并在标记中输入正确的继承类).实际上"转换"你的项目类型,以便你获得MVC和visual studio的好处(添加新的视图,转到控制器等)将需要一些游戏.我最好的建议是在VS 2008中创建一个新的MVC项目和一个新的Web App项目,并以纯文本格式比较.csproj文件.有一个长字符串值告诉VS项目模板.

相信我这确实有效.我之前在我自己的遗留项目上做过.我不记得除了试验/错误/消除之外我是如何找到项目类型"密钥"的. ASP.Net MVC在与webforms相同的项目中确实很好玩.

更新:我认为您可以更改为MVC项目类型,它仍然是一个Web应用程序,通过在.csproj文件的PropertyGroup中使用它们.将这些与您所拥有的相比较并更改不同的那些,请务必复制/备份该文件.

{B99EC98A-1F09-4245-B00D-5AF985190AA9}
{603c0e0b-db56-11dc-be95-000d561079b0};{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}

更新2:您不会影响您的项目或影响它.如果你不容易,那就备份并玩游戏吧.如果您遇到更改,您将始终拥有备份.起初我很怀疑,但很高兴我走上了MVC之路.



2> Jason..:

我想我会使用Visual Studio 2010 SP1/NuGet/Scott Hanselman完全不支持的实用程序给出更新的答案.

    安装MVC3(w/nuget) http://www.asp.net/mvc/mvc3

    转到Visual Studio中的"工具"菜单,然后选择"库包管理器"\"包管理器控制台"

    出现控制台窗口后,将"默认项目"更改为您的webforms项目.

    键入"Install-Package AddMvc3ToWebForms"(http://nuget.org/List/Packages/AddMvc3ToWebForms)

这将为项目添加所有必要的dll,javascript文件,web.config设置更改等.如果一切顺利,您应该可以按F5,导航到您网站上的"home",并查看由mvc呈现的示例表单:"欢迎使用ASP.NET MVC,使用NuGet包以完全不受支持的方式升级汉塞尔曼!没有保修!"



3> Mark Bracket..:

对于WebSite项目,您只需要将控制器添加到App_Code,而不是根目录.你会错过一些VS善良 - 因为它不知道你在没有csproj文件的情况下使用MVC,但你实际上会让它工作.

只记得继承自Controller和ViewPage,你应该做得很好.



4> Peter Hahndo..:

我有一个非常大的ASP.NET网站(不是Web应用程序),并希望将MVC3添加到它.我没有选择改变项目的类型,所以我不得不使用网站(asp.net 4.0).

我使用单独的MVC项目,但不是它自己的Web应用程序,而是作为我旧网站中的程序集.

这是我所做的事情的简要说明:

我在Visual Studio 2010中创建了一个新的MVC3 Web应用程序,我使用了空模板和Razor视图引擎.

我将其添加到现有网站的解决方案中.

我将程序集的输出路径从本地bin目录更改为我的Web站点的bin目录.

我从MVC应用程序中删除了"内容"和"脚本"文件夹.内容和脚本都已经是我网站的一部分,我也可以从MVC的"页面"中引用它们.

我从项目中删除了Global.asax.*文件.我在网站上使用Global.asax.

我将"Views"文件夹和子文件夹复制到了网站上.因为这些是实际文件而不是程序集的一部分,所以它们必须存在于Web站点中而不是构建MVC程序集的项目中.

此时我可以从MVC项目中删除'Views'文件夹,但只有在这个项目类型中我才能获得Visual Studio支持添加新视图.所以我有时会在这里创建一个视图,然后将其移到网站上.在我的网站上编辑cshtml文件时,我仍然可以获得完整的智能感知.

添加了路由到网站.我只是复制了我网站global.asax中MVC global.asax的一些代码.我们需要一些使用方法:

using System.Web.Mvc;
using System.Web.Routing;

在Application_Start中,我们需要:

    AreaRegistration.RegisterAllAreas();
    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);

然后添加常用的路由方法:

    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
    }

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        // your routes
    }

接下来,在您的网站的web.config中添加一些内容.在编译中的system.web中,我们需要以下程序集:

     
        
        
        
        
        
      

最初我还在web.config中添加了一些MVC命名空间,但没有它们似乎工作正常.

您现在可以在网站的Global.asax中创建新路由,然后在MVC项目中添加相应的控制器,然后返回到网站以为其添加视图.所以你的逻辑都在一个程序集中,而视图和路由在网站中定义.

您仍然可以通过在那里设置断点来调试MVC控制器,但是您可以通过启动网站进行调试.

如果您使用建议的MVC默认路由:

        routes.MapRoute("Default", "{controller}/{action}/{id}", 
            new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

对www.mysite.com的调用将提供家庭控制器/视图的内容,而不是旧的default.aspx主页,所以我只是不使用这样的路由.如果与现有物理文件夹和文件路由冲突,请在路由上使用带有正则表达式的约束来排除此类冲突.

即使我在网站中使用母版页,公共页面部分的实际html也是由另一个程序集中的代码创建的.我可以从我的_ViewStart.cshtml或我的基本控制器调用相同的方法.

到目前为止,我还没有看到任何关于这种方法的真正否定.

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有