Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何将现有asp.net应用程序迁移到asp.net MVC模式格式_Asp.net Mvc_Webforms_Migrate - Fatal编程技术网

Asp.net mvc 如何将现有asp.net应用程序迁移到asp.net MVC模式格式

Asp.net mvc 如何将现有asp.net应用程序迁移到asp.net MVC模式格式,asp.net-mvc,webforms,migrate,Asp.net Mvc,Webforms,Migrate,我想将现有的ASP.NET应用程序迁移到ASP.NET MVC模式格式。我应该遵循什么程序?任何一步一步的说明都会非常有用。我不认为存在从ASP.NET WebForms到ASP.NET MVC的“逐步迁移”这样的事情。它们是在同一个框架上构建的两种完全不同的设计模式,但是(在大多数情况下)如果您不只是想在MVC模板项目而不是WebForms模板上构建web应用程序,那么有很多东西不仅需要移动,而且需要完全重新设计 这样做的主要原因是关注点的分离,这在MVC中比在WebForms中更为严格。我目

我想将现有的ASP.NET应用程序迁移到ASP.NET MVC模式格式。我应该遵循什么程序?任何一步一步的说明都会非常有用。

我不认为存在从ASP.NET WebForms到ASP.NET MVC的“逐步迁移”这样的事情。它们是在同一个框架上构建的两种完全不同的设计模式,但是(在大多数情况下)如果您不只是想在MVC模板项目而不是WebForms模板上构建web应用程序,那么有很多东西不仅需要移动,而且需要完全重新设计

这样做的主要原因是关注点的分离,这在MVC中比在WebForms中更为严格。我目前正在(嗯,我应该…)将一个旧的、有缺陷的嗜好项目从WebForms迁移到MVC,我的方法基本上是“查看功能,从头开始重新构建”。当然,我有一些格式化输出的助手方法,我刚刚在我的新项目中包括了这些方法,但我选择的大部分基本内容都是完全重做的。你会感到惊讶的是,我现在用MVC实现同样的目标所花费的时间是如此之少,我在一年半前为WebForms应用程序建立了MVC——通过使用实体框架、jQuery和其他可爱的东西,你可以在几个小时内产生结果。

我的答案是“你没有”:。如果您真的想这样做,您可以使用当前的asp.net站点作为您的最终目标,或者作为需求“文档”。也许你可以在模型中使用数据层,但你必须重新设计整个网站


正如Tomas已经指出的,它与经典的asp.net非常不同。

这是我的分步指南,基于我们公司在从经典的asp.net Webforms过渡到asp.net MVC的过程中所采取的步骤。这并不完美,而且仍在进行中,因为由于网站的规模,我们不得不分阶段进行,但也许其他人会根据我们的结果找到并提交一个改进的答案

阶段: 1.计划-在ASP.Net中从Web表单迁移到MVC需要一些仔细的计划。我们在行动中犯的错误是没有意识到这一阶段的规划实际上有两个方面:路线规划和模型/控制器/行动规划。 不这样做会在以后尝试扩展站点功能或进行更复杂的迁移时导致严重问题

小贴士: -查看您当前的站点地图,并设计改进的站点地图/目录结构,以便在ASP.NETMVC应用程序中使用。为你的网站找出一种“语言”,例如ASP.NETMVC的默认行为是{controller}/{action}/{id}行为,但是当你获得更多的黑客路由规则经验时,你可以覆盖它

  • 请记住,默认情况下,每个控制器都将通过应用程序的虚拟子目录路由到,例如,将路由到XController(以及默认的索引方法),将路由到YController的Get()方法。您可以随意更改(路由功能非常强大),但这超出了本答案的范围

  • 使用现有的站点地图,指定每个当前的.aspx页面应该位于MVC结构中的哪个文件夹(当然,首先要询问它是否应该存在)

  • >P>如果脚本、图像等没有存储在一起,或者在每个子目录中的一些“保留名称”文件夹中,请考虑在重新设计时这样做。 这是因为它允许您使用Global.aspx.cs文件中的Map.IgnoreRoute()路由规则命令绕过将这些文件夹作为路由处理,从而大大简化了设计

在本例中,我们镜像了当前站点的真实子目录布局,其中每个子目录都成为一个控制器,例如/Account将有一个AccountController,/X将有一个XController。每个控制器内的所有页面都被操作替换。e、 现在变成并映射到profileController中的“about”ActionResult方法。 这使得我们能够在一系列sprint中对一个或两个目录(或一个目录中的多个文件)进行部分迁移,从而保持敏捷性,而不必一次迁移整个站点,迁移时间要长得多

  • 在Visual Studio中创建新的ASP.Net MVC应用程序,并立即在Global.asax文件中创建忽略当前站点中存在的文件夹路由规则的规则

  • 将文件夹从ASP.Net Web应用程序复制到ASP.Net MVC应用程序文件夹。运行网站并确保其正常工作(应该是因为还没有使用路由规则)

  • 在子目录中选择要迁移的子目录或文件子集

  • 对于此子目录中的每个.aspx页面:

    a。首先创建它的视图。我倾向于使用web浏览器呈现的页面版本作为基本HTML,然后在我知道的充满动态数据的位置放置占位符

    b。使用动态数据的占位符,使用简单的数据类型创建模型的初稿。这个模型一开始很简单,但随着您从原始站点迁移更多页面,它会不断被重构,所以如果它开始看起来有点沉重,也不用担心。如果您发现一个模型中的属性太多,或者看到的逻辑分组超出了某些项目子集的模型,那么这可能是一个迹象,即需要对模型进行重构,以使其具有一个对象,而不是将这些简单的数据类型作为属性,但它们是在业务逻辑层中组成的

    c。如果尚未创建控制器,则创建该控制器,并将计划确定的操作的相应ActionResult方法发送到此视图。 如果发现有新操作无法映射到旧站点的页面,请创建控制器视图,并包括相应的//TODO: