【问题标题】:MVC2 and MVC Futures causing RedirectToAction issuesMVC2 和 MVC 期货导致 RedirectToAction 问题
【发布时间】:2011-02-06 23:00:06
【问题描述】:

我一直试图从 MVC Futures 项目中获取 RedirectToAction 的强类型版本来工作,但我一直没有得到任何结果。以下是我遵循的步骤,以及我遇到的错误。非常感谢任何帮助。

我创建了一个新的 MVC2 应用并将 HomeController 上的 About 操作更改为重定向到 Index 页面。

Return RedirectToAction("Index")

但是,我想使用强类型扩展,因此我从 CodePlex 下载了 MVC Futures,并将对 Microsoft.Web.Mvc 的引用添加到我的项目中。

我在 HomeContoller.vb 的顶部添加了以下“import”语句

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 中定义':不能从这些参数中推断出类型参数的数据类型。明确指定数据类型可能会更正此错误。
'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 个新的泛型重载),但在尝试编译代码时,编译器似乎只会“找到”来自 Futures 评估的 2 种非通用扩展方法。

我认为这可能是一个问题,因为我使用了 MVC2 程序集和期货程序集的冲突版本,因此我将期货下载中的 MvcDiaganotics.aspx 添加到我的项目中,并且一切看起来都正确:

ASP.NET MVC 程序集信息 (System.Web.Mvc.dll)

程序集版本:ASP.NET MVC 2 RTM (2.0.50217.0)
全名:System.Web.Mvc,版本=2.0.0.0,文化= 中性,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 Futures (2.0.50217.0)
全名:Microsoft.Web.Mvc,版本=2.0.0.0, Culture=neutral, PublicKeyToken=null
代码库:file:///xxxx/bin/Microsoft.Web.Mvc.DLL
部署:bin-部署

这快把我逼疯了!因为我认为这可能是一些 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# 中),他们能否告诉我他们做了什么不同(如果有的话)?

谢谢!

【问题讨论】:

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


    【解决方案1】:

    尝试使用:

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

    使用this 限定符允许使用扩展方法。

    【讨论】:

    • 这对我的 c# 项目成功了。您是否有理由需要使用“this”关键字?我认为这是隐含的。
    猜你喜欢
    • 1970-01-01
    • 2011-01-21
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    • 2023-04-08
    相关资源
    最近更新 更多