8

我可以使用 MVC 2 程序集顺利运行 MVC 1 应用程序吗?我知道一些 3rd 方工具在 MVC 2 中出现了问题,但我们假设我没有使用任何其他工具。

4

3 回答 3

7

发生了重大变化

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

以下是可能“中断”的更改(截至预览版 2):

预览版 2 中的更改

助手现在返回一个MvcHtmlString对象

为了利用 ASP.NET 4 中新的 HTML 编码表达式语法,HTML 帮助器的返回类型现在MvcHtmlStringstring. 请注意,如果您使用 ASP.NET MVC 2 和 ASP.NET 3.5 的新助手,您将无法利用 HTML 编码语法;新语法仅在您在 ASP.NET 4 上运行 ASP.NET MVC 2 时可用。

JsonResult现在只响应 HTTP POST 请求

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

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

类中添加了一个新的可ModelMetadata设置属性ModelBindingContext。新属性封装了模型和ModelType属性。尽管ModelandModelType属性已经过时,但为了向后兼容,属性 getter 仍然有效;他们委托给ModelMetadata属性以检索值。

预览版 1 中的更改

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

此更改会影响派生自DefaultControllerFactory. DefaultControllerFactory 类已通过删除该RequestContext属性并将请求上下文实例传递给受保护的虚拟方法GetControllerInstanceGetControllerType.

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

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

“区域”现在是保留的路由值键

Route 值中的字符串“area”现在在 ASP.NET MVC 中具有特殊含义,就像“controller”和“action”一样。一个含义是,如果 HTML 助手提供了包含“区域”的路由值字典,则助手将不再在查询字符串中附加“区域”。

如果您使用的是区域功能,请确保不要将{area}其用作路由 URL 的一部分。

已知的问题

The Add View dialog box throws a NullReferenceException when the Create strongly-typed view check box is checked, a View Content selection other than “Empty” is selected, and a View data class type name is specified for a type that does exist. 指定类型名称时,使用下拉列表选择类型名称或键入完全限定的类型名称。对于不存在的类型,您必须将查看内容设置为“空”。

于 2010-02-04T19:14:28.347 回答
1

看看这个文件。您将了解重大更改: http: //go.microsoft.com/fwlink/ ?LinkID=157072

于 2010-02-04T19:16:32.070 回答
1

一个困扰我的问题是,模型的所有字段现在总是在帖子上得到验证。

Brad Wilson在这里描述了这些变化。

Steve Anderson 的博客文章描述了这个问题和我最喜欢的解决方案(使用自定义验证器)。

于 2010-04-13T14:33:32.743 回答