MVC2和MVC Futures导致RedirectToAction问题

时间:2010-04-12 10:37:17

标签: asp.net asp.net-mvc asp.net-mvc-2 redirecttoaction asp.net-mvc-futures

我一直在尝试从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程序集信息(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

ASP.NET MVC期货装配信息(Microsoft.Web.Mvc.dll)

汇编版: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#中),他们可以让我知道他们做了什么(如果有的话)吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

尝试使用:

return this.RedirectToAction<HomeController>(c => c.Index());

使用this限定符可以使用扩展方法。