我可以毫不费力地使用MVC 2程序集运行MVC 1应用程序吗?我知道有些第三方工具在MVC 2中已经破坏了,但我们假设我没有使用其他任何工具。
答案 0 :(得分:7)
如果你想在1.0上运行1.0项目,它确实在不同的地方寻找东西; so you'd have to migrate the application to 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
类现在只响应HTTP POST
请求。应该将AJAX GET调用返回JsonResult
对象的操作方法更改为使用POST。如有必要,您可以通过设置JsonRequestBehavior
的新JsonResult
属性来覆盖此行为。有关潜在漏洞利用的更多信息,请参阅Phil Haack博客上的JSON Hijacking博客文章。
ModelBindingContext
上的Model和ModelType属性设置器已过时 ModelMetadata
类中添加了一个新的可设置ModelBindingContext
属性。新属性封装了Model和ModelType
属性。虽然Model
和ModelType
属性已过时,但为了向后兼容,属性getter仍可正常工作;他们委托ModelMetadata
属性来检索值。
预览1中的更改
DefaultControllerFactory
类更改会破坏从中派生的自定义控制器工厂此更改会影响从DefaultControllerFactory
派生的自定义控制器工厂。通过删除RequestContext
属性并将请求上下文实例传递给受保护的虚拟方法GetControllerInstance
和GetControllerType
来修复DefaultControllerFactory类。
要更新自定义控制器工厂以支持ASP.NET MVC 2,请更改方法签名或签名以匹配新签名,并使用请求上下文参数而不是属性。
Route值中的字符串“area”现在在ASP.NET MVC中具有特殊含义,与“controller”和“action”的作用相同。一个含义是,如果为HTML帮助程序提供包含“area”的路由值字典,则帮助程序将不再在查询字符串中附加“area”。
如果您使用的是区域功能,请确保不要将{area}
用作路线网址的一部分。
已知问题
选中“创建强类型视图”复选框时,“添加视图”对话框将引发NullReferenceException,选择“清空”以外的“视图内容”选项,并为存在的类型指定“查看数据类类型名称” 。指定类型名称时,请使用下拉列表选择类型名称或键入完全限定类型名称。对于不存在的类型,必须将“视图内容”设置为“空”。
答案 1 :(得分:1)
查看此文档。您将了解重大变化: http://go.microsoft.com/fwlink/?LinkID=157072
答案 2 :(得分:1)
困扰我的一个问题是模型的所有字段现在总是在帖子上验证。
这些变化由Brad Wilson here描述。
Steve Anderson's blog post描述了问题和我最喜欢的解决方案(使用自定义验证器)。