我一直在尝试从 MVC Futures 项目中获取 RedirectToAction 的强类型版本来工作,但我一直没有得到任何结果。以下是我遵循的步骤,以及我遇到的错误。任何帮助深表感谢。
我创建了一个新的 MVC2 应用程序并将 HomeController 上的 About 操作更改为重定向到 Index 页面。
Return RedirectToAction("Index")
但是,我想使用强类型扩展,所以我从 CodePlex 下载了 MVC Futures,并将对 Microsoft.Web.Mvc 的引用添加到我的项目中。
我在 HomeContoller.vb 的顶部添加了以下“导入”语句
Imports Microsoft.Web.Mvc
我注释掉了上面的 RedirectToAction 并添加了以下行:
Return RedirectToAction(Of HomeController)(Function(c) c.Index())
到现在为止还挺好。但是,我注意到如果我取消注释第一个(非通用)RedirectToAction,它现在会导致以下编译错误:
错误 1 重载解析失败,因为无法使用这些参数调用可访问的“RedirectToAction”:
扩展方法“Public Function RedirectToAction(Of TController)(action As System.Linq.Expressions.Expression(Of System.Action(Of TController))) As 'Microsoft.Web.Mvc.ControllerExtensions' 中定义的 System.Web.Mvc.RedirectToRouteResult':无法从这些参数中推断出类型参数的数据类型。明确指定数据类型可能会更正此错误。
'Microsoft.Web.Mvc.ControllerExtensions' 中定义的扩展方法'Public Function RedirectToAction(action As System.Linq.Expressions.Expression(Of System.Action(Of HomeController))) As System.Web.Mvc.RedirectToRouteResult': Value of类型 'String' 不能转换为 'System.Linq.Expressions.Expression(Of System.Action(Of mvc2test1.HomeController))'。
尽管智能感知显示了 8 个重载(最初的 6 个非泛型重载,加上来自 Futures 程序集的 2 个新的泛型重载),但在尝试编译代码时,编译器似乎只会“找到”2 个非泛型重载。来自期货评估的通用扩展方法。
我认为这可能是我使用的 MVC2 程序集和期货程序集版本冲突的问题,因此我将期货下载中的 MvcDiaganotics.aspx 添加到我的项目中,并且一切看起来都是正确的:
ASP.NET MVC 程序集信息 (System.Web.Mvc.dll)
程序集版本:ASP.NET MVC 2 RTM (2.0.50217.0)
全名:System.Web.Mvc,Version=2.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35
代码库:file:///C:/WINDOWS/assembly /GAC_MSIL/System.Web.Mvc/2.0.0.0__31bf3856ad364e35/System.Web.Mvc.dll
部署:GAC-deployed
ASP.NET MVC 期货程序集信息 (Microsoft.Web.Mvc.dll)
汇编版本:ASP.NET MVC 2 RTM Futures (2.0.50217.0)
全名:Microsoft.Web.Mvc,Version=2.0.0.0,Culture=neutral,PublicKeyToken=null
代码库:file:///xxxx/bin/Microsoft .Web.Mvc.DLL
部署:bin-deployed
这真让我抓狂!因为我认为这可能是一些 VB 问题,所以我使用 C# 创建了一个新的 MVC2 项目并尝试了与上面相同的方法。
我在 HomeController.cs 的顶部添加了以下“使用”语句
using Microsoft.Web.Mvc;
这一次,在 About 操作方法中,我只能通过键入以下完整命令来调用非泛型 RedirectToAction:
return Microsoft.Web.Mvc.ControllerExtensions.RedirectToAction<HomeController>(this, c => c.Index());
即使我在类的顶部有一个“使用”语句,如果我尝试如下调用非泛型 RedirectToAction:
return RedirectToAction<HomeController>(c => c.Index());
我会得到以下编译错误:
错误 1 非泛型方法 'System.Web.Mvc.Controller.RedirectToAction(string)' 不能与类型参数一起使用
是什么赋予了?这不像我在尝试做任何不寻常的事情。这是一个简单的 vanilla MVC2 项目,仅引用了 Futures 程序集。
我希望我错过了一些明显的东西,但我一直在摸不着头脑,所以我想我会寻求一些帮助。
如果有人设法让这个简单的场景工作(在 VB 和/或 C# 中),他们能否让我知道,如果有的话,他们做了什么不同的事情?
谢谢!