ASP.NET MVC 1是否与ASP.NET MVC 2兼容?

Gab*_*abe 8 asp.net asp.net-mvc backwards-compatibility

我可以毫不费力地使用MVC 2程序集运行MVC 1应用程序吗?我知道有些第三方工具在MVC 2中已经破坏了,但我们假设我没有使用其他任何工具.

Geo*_*ker 7

有一些突破性的变化.

如果你想在1.0上运行1.0项目,它确实在不同的地方寻找东西; 所以你必须将应用程序迁移到2.0..

以下是可能"中断"的更改(预览2中的当前更改):

预览2的变化

助手现在返回一个MvcHtmlString物体

为了利用ASP.NET 4中新的HTML编码表达式语法,HTML助手的返回类型现在MvcHtmlString而不是a string.请注意,如果您使用ASP.NET MVC 2和ASP.NET 3.5的新助手,您将无法利用HTML编码语法; 只有在ASP.NET 4上运行ASP.NET MVC 2时,新语法才可用.

JsonResult 现在只响应HTTP POST请求

为了减轻可能发生信息泄露的JSON劫持攻击,默认情况下,JsonResult该类现在仅响应HTTP POST请求.JsonResult应该将AJAX GET调用返回对象的操作方法更改为使用POST.如有必要,可以通过设置新JsonRequestBehavior属性来覆盖此行为JsonResult.有关潜在漏洞利用的更多信息,请参阅Phil Haack博客上的JSON Hijacking博客文章.

Model和ModelType属性设置器ModelBindingContext已过时

该类中ModelMetadata添加了一个新的可设置属性ModelBindingContext.新属性封装了Model和ModelType属性.虽然ModelModelType属性已经过时,但为了向后兼容,属性getter仍然有用; 他们委托给该ModelMetadata属性来检索该值.

预览1的变化

DefaultControllerFactory 类更改会破坏从中派生的自定义控制器工厂

此更改会影响派生自定义控制器工厂DefaultControllerFactory.所述DefaultControllerFactory类固定通过去除RequestContext属性,而是将请求传递上下文实例到受保护虚拟方法GetControllerInstanceGetControllerType.

自定义控制器工厂通常用于为ASP.NET MVC应用程序提供依赖项注入.

要更新自定义控制器工厂以支持ASP.NET MVC 2,请更改方法签名或签名以匹配新签名,并使用请求上下文参数而不是属性.

"Area"现在是一个保留的路由值键

Route值中的字符串"area"现在在ASP.NET MVC中具有特殊含义,与"控制器"和"操作"的方式相同.一个含义是,如果为HTML帮助程序提供包含"area"的路由值字典,则帮助程序将不再在查询字符串中附加"area".

如果您使用区域功能,请确保不要将其{area}用作路线网址的一部分.

已知的问题

选中"创建强类型视图"复选框时,"添加视图"对话框将引发NullReferenceException,选择"清空"以外的"视图内容"选项,并为存在的类型指定"查看数据类类型名称".指定类型名称时,请使用下拉列表选择类型名称或键入完全限定类型名称.对于不存在的类型,必须将"查看内容"设置为"空".