2009-02-12 37 views
30

我应客户的请求构建了一个包含ASP.NET Web窗体的大型站点。问题是,我发现ASP.NET Web表单有点不直观(我个人的口味)。所以我想要做的就是使用MVC,但我不能指望我的客户为完成重写而付出时间(他也没有时间)。我可以使用ASP.NET MVC与常规的ASP.NET Web窗体

所以我问的是,我可以同时使用ASP.NET MVC和Web窗体,并逐渐使用MVC越来越多?有小费吗?

回答

16

更新2014:

的Visual Studio 2013使我们更接近一个ASP.NET。 没有MVC 项目类型或Web窗体项目,只有ASP.NET。如果您想要混合Web窗体和Web API,或者MVC和SignalR,请继续! 您受到鼓励和支持。新功能和功能是 与NuGet带来没有打破现有的应用程序。

VS 13

所以Web Forms和MVC(已几乎被无缝地工作)的混合,现在鼓励和边界模糊。我想MS认识到需要允许项目慢慢迁移到MVC,或者根据需要迁移部分,并获得两全其美。


MVC项目:

已经使用MVC的Web窗体相当长的一段时间肯定是可能的,一个很好的选择。通过良好的体系结构设计(例如DDD(服务存储库,依赖注入等)),可以将新功能和页面轻松添加到MVC页面中,并且旧的功能可以保持原样。在一个webforms页面中组合MVC也可以正常工作,尽管JS验证可能存在一些小问题。我会极力推荐它。

从创建一个MVC应用程序(5个atm)开始,然后在启动并运行基本模板后,在文件夹内添加旧的webforms。这样您就可以正确地获得新的MVC设置,并保持向后兼容性。

  • 您可以创建一个MVC项目,并将所有Webforms页面复制到一个文件夹。 (可能只是升级一个项目,我会想象)
  • 设置路由忽略URL中具有该特定文件夹名称的请求。这样,MVC和webforms可以一起使用,而不会在URL中造成麻烦。
  • Asp.net WebForms aspx页面可以驻留在MVC中,只要它们不在/ Views文件夹中。
  • 在旧的语法中使用Razor,您可以轻松地自定义HTML助手,并且它更加干净。
  • 检查MVC标准和约定,控制器应该非常轻便。它不是可以包含尽可能多的逻辑的代码隐藏。
  • 意见不应包含除表示逻辑(没有业务逻辑)
  • 一切新的东西=> MVC
  • 资源,web.config文件等都是由这两个
  • 菜单使用不使用旧的站点地图的在MVC

使用MVC一个web表单内.aspx页:

下面的文本旨在演示如何从webforms页面内部使用MVC。 (例如,在MyPage.aspx中)您可以在webforms中使用MVC动作/视图。 ajax来填充页面或某些div的一部分。

包含MVC的Webforms工作正常,至少在HTML中添加ajax调用以填充MVC的div时。

里面一个.aspx

..html & webforms code 

<div id="fillMeFromMVC"> 
    <script type="text/javascript"> 
    $.ajax(... call an MVC action to fill 
     the "fillMeFromMVC" div that this script sits inside of); 
</script> 
</div> 

这将填补通过MVC的页面的一部分,你可以清晰地做你的MVC,而不用担心什么在网络表单完成。

的WebForms与MVC:但是这里

通过这一点,你可能很了解这两种技术之间的差异,是他们之间的一个小比较。他们都有自己的目的和用途。我个人比较喜欢MVC,因为我需要做的事情,但这可能取决于你想要达到的目标。

如果您使用例如在他们身后的SOA和Web页面都可以使用相同的业务逻辑。 当代码全部位于页面后面并与UI相关联时(无需分离关注点),Webforms可能是有害的。有了可靠的体系结构和一些可以减少的努力。

延伸阅读:

Webforms vs. MVC (Code project)

Difference betweeen ASP.NET WebForms and ASP.NET MVC (a blog)

+0

我认为你是错的,因为MVC`RouteCollection`有这个设置叫做'RouteExistingFiles`这是'默认FALSE`。这意味着如果您访问现有的aspx页面(并且它不驻留在** Views **文件夹内(本地web.config阻止对文件的直接请求访问),它应该作为日常WebForm处理。 – 2012-05-09 08:40:18

相关问题