从ASP.NET MVC Preview 5升级到新发布的Beta版本时,您需要做什么问题或重构?
第一个问题:死亡的黄色屏幕.
CS0234: The type or namespace name 'Mvc' does not exist in the namespace 'System.Web' (are you missing an assembly reference?)
解决方案:我删除了项目中的所有引用并重新添加它们,指向程序文件\ asp.net\asp.net mvc beta\assemblies中的程序集,但这并没有解决问题.
我在gac中有一个system.web.mvc dll(不知道怎么做).试图删除它.无法; 一个或多个应用程序需要组装.必须找到这里描述的程序集并删除注册表项.然后我能够删除gac的system.web.mvc版本.
此STILL无法解决问题.我不得不重新添加引用AGAIN.现在它的工作.
只是为了清楚!!! beta程序集被删除在Program Files下,而旧版本的System.Web.Mvc则在GAC中.
我自己即将这样做.以下是自述文件的更改列表:
将默认验证消息更改为更加最终用户友好.
将CompositeViewEngine重命名为AutoViewEngine.
向UrlHelper类型的Controller添加了Url属性.这样可以方便地从控制器中生成基于路由的URL.
添加了ActionNameSelectorAttribute抽象基类,该基类用作ActionNameAttribute的基类型.通过继承此基本属性类,您可以创建参与按名称选择操作的自定义属性.
为IViewEngine添加了一个新的ReleaseView方法,允许在视图完成呈现时通知自定义视图引擎.这对于清理或视图池方案很有用.
将ControllerBuilder方法DisposeController重命名为ReleaseController,以适应为视图引擎建立的模式.
删除了HtmlHelper类上的大多数方法,将它们转换为HtmlHelper类的扩展方法.这些方法存在于新的命名空间(System.Web.Mvc.Html)中.如果要从Preview 5迁移,则必须将以下元素添加到Web.config文件的名称空间部分:
这使您可以用自己的方法完全替换我们的帮助程序方法.
更改了默认模型绑定器(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属性匹配当前请求的方法.在此示例中,第一个方法将处理Edit操作的任何非POST请求.
为ViewDataDictionary.Eval方法添加了一个重载,该方法接受格式字符串.
从ViewContext类中删除了ViewName属性.
为值提供程序添加了IValueProvider接口,以及默认实现DefaultValueProvider.值提供程序提供绑定到模型对象时模型绑定程序使用的值.已更新Controller类的UpdateModel方法,以允许您指定自定义值提供程序.
我遇到了与Will相同的问题,不得不做与他类似的事情,包括将dll复制到bin文件夹.
现在事情在内部vs.net服务器上工作,但导致IIS7崩溃.
好吧,原来其中一个主要问题是我错过了更新web.config中编译程序集的步骤: