我可以使用 MVC 2 程序集顺利运行 MVC 1 应用程序吗?我知道一些 3rd 方工具在 MVC 2 中出现了问题,但我们假设我没有使用任何其他工具。
3 回答
发生了重大变化。
如果您希望 1.0 项目在 2.0 上运行,它确实会在不同的地方寻找东西;所以你必须将应用程序迁移到 2.0。.
以下是可能“中断”的更改(截至预览版 2):
预览版 2 中的更改
助手现在返回一个MvcHtmlString
对象
为了利用 ASP.NET 4 中新的 HTML 编码表达式语法,HTML 帮助器的返回类型现在MvcHtmlString
是string
. 请注意,如果您使用 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
属性。尽管Model
andModelType
属性已经过时,但为了向后兼容,属性 getter 仍然有效;他们委托给ModelMetadata
属性以检索值。
预览版 1 中的更改
DefaultControllerFactory
类更改会破坏从它派生的自定义控制器工厂
此更改会影响派生自DefaultControllerFactory
. DefaultControllerFactory 类已通过删除该RequestContext
属性并将请求上下文实例传递给受保护的虚拟方法GetControllerInstance
和GetControllerType
.
自定义控制器工厂通常用于为 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. 指定类型名称时,使用下拉列表选择类型名称或键入完全限定的类型名称。对于不存在的类型,您必须将查看内容设置为“空”。
看看这个文件。您将了解重大更改: http: //go.microsoft.com/fwlink/ ?LinkID=157072
一个困扰我的问题是,模型的所有字段现在总是在帖子上得到验证。
Brad Wilson在这里描述了这些变化。
Steve Anderson 的博客文章描述了这个问题和我最喜欢的解决方案(使用自定义验证器)。