如何将现有的asp.net应用程序到ASP.NET MVC模式格式

问题描述 投票:37回答:4

我想迁移现有的ASP.NET应用程序的ASP.NET MVC模式格式。我应该遵循哪些程序?任何一步一步的操作将是非常有益的。

asp.net-mvc webforms migrate
4个回答
71
投票

这些是我一步一步的指导的基础上,我们在我的公司我们从经典的ASP.Net Web表单移动到ASP.Net MVC期间已采取的步骤。它并不完美,并且仍在继续,因为我们必须这样做,因为该网站的大小的阶段,但也许其他人会发现和文件基于我们的研究结果改进的答案。

阶段:1.规划 - 从ASP.Net Web窗体移动到MVC需要仔细规划。我们在我们的举动犯的错误一点没意识到有实际上有两个方面,到这个阶段的规划,路线规划和模型/控制器/行动计划。不这样做会造成严重问题以后,当你试图扩展您的网站或打更复杂的迁移功能。

提示: - 看看当前的站点地图,并设计在ASP.Net MVC应用程序中使用改进的网站地图/目录结构。找出一种“语言”为您的网站,例如ASP.Net MVC的默认行为是有http://sitename/ {控制器} / {行动} / {ID}行为,但你获得更多的经验黑客的路由规则,你可以重写此。

  • 默认情况下,每个控制器将通过您的应用程序,例如的虚拟子目录被路由到记住http://sitename/X将路线XController(和默认情况下它的索引方法),http://sitename/Y/Get将路线YController的get()方法。请你(路由真的很强大)你可以改变这一点,但这已经超出了这个答案的范围。
  • 使用现有的地图,指定每个电流.aspx页面中应该落在什么文件夹中的MVC结构(当然,首先询问是否应该存在的话)。
  • 如果脚本,图像等不存储在一起,或在每个子目录内的一些“保留名称”文件夹,考虑所以现在为你重新设计做。这是因为这将极大地允许您在Global.aspx.cs文件使用Map.IgnoreRoute()的路由规则命令绕过处理这些文件夹的路径简化设计。

在我们的例子中,我们反映了当前站点,其中每个子目录成为控制器的实际子目录布局,例如/账户将有一个的AccountController,/ X将有XController。落在里面有所有的网页是由每个控制器内的操作代替。例如http://sitename/profile/about.aspx成了现在http://sitename/profile/about并映射到ProfileController可里面的“约”的ActionResult方法。这使我们能够留在了一系列的冲刺做一个或两个目录(或一个目录内的多个文件)的部分迁移,而不是整个网站一气呵成在更长的持续时间迁移敏捷。

  1. 在Visual Studio中的一个新的ASP.Net MVC应用程序,并立即建立在Global.asax文件忽略存在于当前站点的文件夹路由规则的规则。
  2. 该文件夹从ASP.Net Web应用程序的ASP.Net MVC应用程序文件夹复制。所经营的网站,并确保其工作正常(它应该不存在路由规则被尚未使用)。
  3. 选择一个子目录中的文件的子目录或子集进行迁移。
  4. 对于这个子目录中的每个.aspx页面中: 一种。首先创建视图。我倾向于使用呈现在页面的版本,我的基本HTML网页浏览器,然后把占位符,我知道都充满了动态数据的位置。 湾使用动态数据占位符,创建一个使用简单数据类型的模型的第一稿。这种模式将开始简单的,但你迁移从原来的网站更多的页面不断地重构,因此如果它开始看起来有点沉重不用担心。如果你发现自己有太多的属性在一个型号供你品尝,或者看逻辑分组超出项目的特定子集的只是模型,或许这是一个迹象,需要对模型进行重构,有一个对象,而不是用这些简单的数据类型作为属性,但由在业务逻辑层。 C。创建控制器如果它未被创建,并出台相应的ActionResult方法为您规划已经确定应该对这种观点的路线行动。如果你意识到的东西,有不映射到旧网站页面的新动作,然后创建控制器的视图,包括适当// TODO:标签,这样可以保持的这条赛道后你实现已经迁移现有的网页。 d。考虑投入未知的一些行动处理代码为好,如果你没有在你的Global.asax.cs文件中对此有一个{*}包罗万象的路由规则了。 即用于创建模型构造类,以便该控制器将具有(传过来的(编号)或可能从URL或HTTP报头或cookie中的Request.QueryString参数)给予一定的参数,该模型将知道如何接触到您现有的业务逻辑类,并建立本身由视图渲染。 F。转到下一页在列表中,并从步骤重新开始。
  5. 最后创建路由规则,会打电话给你新的控制器,让你写的操作来实现。调试,调试,调试......一旦你高兴一切都很好,删除现有的文件夹和文件,你从主站点迁移,以及在Global.asax.cs中的IgnoreRoute规则。
  6. 创建以任何方式重定向你喜欢,如果你希望保留旧目录和文件名的连续性(例如,用户可能已经在书签旧站点的某些网页)。

注:如果您在移植阶段保留旧子目录在你的MVC网站的确切名称,这是最好的整体子目录我已经意识到一次迁移,因为只有做了几个文件,你需要的路由规则写变得更加复杂,因为如果使用相同的名称作为一个路由规则的路径上存在一个现有文件夹,该文件夹中有一个Default.aspx文件,然后(/ FOLDERNAME /)将默认为Default.aspx页面,因为它为优先选项路由过规则。

提示:认真考虑使用像RouteDebug路线调试工具,这样你就可以找出像上面奇怪的事情,或者当你有多个路由规则开火并造成意想不到的行为。

这是我的第一稿,请给我的反馈,如果我错过了任何步骤,或者如果你看到指南中的任何孔,我会适当地修改答案。


2
投票

我不认为有这样的事,作为一个从ASP.NET的WebForms到ASP.NET MVC“一步一步的迁移”。它们是建立在相同的架构两个完全不同的设计模式,但也有(在大多数情况下)很多,不仅需要的东西移动,但是完全重新设计的,如果你不就是想建一个网站应用程序的MVC模板项目,而不是WebForms的模板。

造成这种情况的主要原因是关注点分离,这是MVC比的WebForms更为严格。我目前的工作(当然,我应该是...)在从迁移到的WebForms MVC的老漂亮的马车爱好项目和我的做法已经基本“看功能,从头开始重新构建它。”当然,我不得不格式化,我只是包含在我的新项目输出等一些辅助方法,但大部分的基本的东西,我只是选择了完全重做。你会惊奇地发现它是如何少花了我现在达到与MVC相同的目标,那我设置为应用程式的WebForms一年和半前 - 与使用实体框架,jQuery和其他甜的东西,你就可以在几个小时内产生结果。


2
投票

可这几个额外的提示,将有助于

  • 替换<% - 与@注释标记*
  • 使用@RenderSection(“页脚”,FALSE)为@section页脚{}等,如果您有任何其他的ContentPlaceHolder除了查看主体,RenderBody()。
  • 所有旧的正常RUNAT =“服务器”标签是无害的,不会妨碍编译,可以事后进行清洗
  • 这是很容易在后面代码和标记(可见=“真”)控制并且在由使用控制Id的code_behind控制的所有控制能见度必须重构为ViewBag收集和@if在剃刀视图块。
  • 你还可以观看Pluralsight围绕这个话题(3H49米)这个精品课程 Rebuilding Web Forms Applications in MVC

1
投票

我的答案是“你不会” :)。如果你真的想这样做,你可以使用目前的asp.net网站作为自己最终的目标,或者作为一个要求“文件”。也许你可以使用数据层在模型中,但你必须重新设计整个网站。

正如托马斯已经指出的那样,这是从传统的asp.net很大的不同。

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