我一直在尝试从MVC Futures项目中获取强类型版本的RedirectToAction,但是我一直没有。以下是我遵循的步骤,以及我遇到的错误。非常感谢任何帮助。
我创建了一个新的MVC2应用程序并更改了HomeController上的About操作以重定向到Index页面。
Return RedirectToAction("Index")
但是,我想使用强类型扩展,所以我从CodePlex下载了MVC Futures,并在我的项目中添加了对Microsoft.Web.Mvc的引用。
我将以下“import”语句添加到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 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'在'Microsoft.Web.Mvc.ControllerExtensions'中定义:Value of Value类型'String'无法转换为'System.Linq.Expressions.Expression(Of System.Action(Of mvc2test1.HomeController))'。
尽管智能显示了8个重载(最初的6个非泛型重载,加上Futures组件中的2个新的泛型重载),但在尝试编译代码时,编译器似乎只能“找到”来自期货评估的2种非常规扩展方法。
我认为这可能是一个问题,我正在使用MVC2程序集和期货程序集的冲突版本,因此我将期货下载中的MvcDiaganotics.aspx添加到我的项目中,并且每个人看起来都是正确的:
程序集版本: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
汇编版:ASP.NET MVC 2 RTM期货(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”语句
using Microsoft.Web.Mvc;
这次,在About操作方法中,我只能通过输入完整的命令来管理非泛型RedirectToAction,如下所示:
return Microsoft.Web.Mvc.ControllerExtensions.RedirectToAction<HomeController>(this, c => c.Index());
即使我在课程顶部有一个“using”语句,如果我尝试按如下方式调用非泛型RedirectToAction:
return RedirectToAction<HomeController>(c => c.Index());
我会得到以下编译错误:
错误1非泛型方法'System.Web.Mvc.Controller.RedirectToAction(string)'不能与类型参数一起使用
是什么给出的?这并不像我想做任何与众不同的事情。 这是一个简单的vanilla MVC2项目,仅提及Futures组件。
我希望我错过了一些明显的东西,但是我已经摸不着头脑了,所以我想我会寻求一些帮助。
如果有人设法让这个简单的场景工作(在VB和/或C#中),他们可以让我知道他们做了什么(如果有的话)吗?
谢谢!
答案 0 :(得分:3)
尝试使用:
return this.RedirectToAction<HomeController>(c => c.Index());
使用this
限定符可以使用扩展方法。