解决方法
CodePlex Preview 5和Beta之间的变化
>将默认验证消息更改为更加终端用户友好.
>将CompositeViewEngine重命名为AutoViewEngine.
>向UrlHelper类型的Controller添加一个Url属性.这样可以方便地从控制器内部生成基于路由的URL.
添加ActionNameSelectorAttribute抽象基类,作为ActionNameAttribute的基本类型.通过从这个基本属性类继承,您可以通过名称创建参与动作选择的自定义属性.
>向IViewEngine添加了一个新的ReleaseView方法,允许在视图完成渲染时通知自定义视图引擎.这对于清理或视图池方案很有用.
>将ControllerBuilder方法的DisposeController重命名为ReleaseController以适应为视图引擎创建的模式.
>删除了HtmlHelper类中的大部分方法,将它们转换为HtmlHelper类的扩展方法.这些方法存在于新的命名空间(System.Web.Mvc.Html)中.如果要从预览5迁移,则必须将以下元素添加到Web.config文件的命名空间部分:
< add namespace =“System.Web.Mvc.Html”/>
这样可以使您自己完全替换我们的帮助方法.
>更改默认模型binder(DefaultModelBinder)来处理复杂类型. IModelBinder接口也被更改为接受ModelBindingContext类型的单个参数.
>添加了一个新的HttpVerbs枚举,其中包含最常用的HTTP动词(GET,POST,PUT,DELETE,HEAD).还为接受枚举的AcceptVerbsAttribute添加了一个构造函数重载.枚举的值可以组合.因为可以响应未包含在枚举中的HTTP动词,所以AcceptVerbsAttribute保留接受字符串数组作为参数的构造函数.例如,以下代码片段显示了可以响应POST和PUT请求的操作方法.
[AcceptVerbs(HttpVerbs.Post | HttpVerbs.Put)] public ActionResult Update() {... }
>修改RadioButton助手方法,以确保每个重载都接受一个值.因为单选按钮用于从一组可能的值中指定选择,因此需要指定单选按钮的值.
>修改和修改默认的项目模板.这包括将脚本文件移动到新的Scripts文件夹.默认模板使用ModelState类来报告验证错误.
>更改动作方法选择.如果两个动作方法匹配请求,但只有一个动作方法具有与ActionMethodSelectorAttribute派生的属性,该属性与请求匹配,则会调用该操作.在早期版本中,这种情况导致了异常.
例如,以下两个操作方法在同一个控制器中:
public ActionResult Edit() { //... } [AcceptVerbs(HttpVerbs.Post)] public ActionResult Edit(FormCollection form) { //... }
在预览5中,编辑操作的POST请求将导致异常,因为两个方法与请求匹配.在Beta中,通过AcceptVerb属性给出与当前请求匹配的方法的优先级.在此示例中,第一种方法将处理“编辑”操作的任何非POST请求.
>为接受格式字符串的ViewDataDictionary.Eval方法添加了一个重载.>从ViewContext类中删除ViewName属性.>为值提供程序添加了一个IValueProvider接口,以及默认实现DefaultValueProvider.值提供者提供模型绑定器绑定到模型对象时使用的值. Controller类的UpdateModel方法已更新,允许您指定自定义值提供程序.