2

MVC Futures 프로젝트에서 RedirectToAction의 강력한 형식화 된 버전을 사용하려고했지만 계속 사용하고 있습니다. 아래는 내가 따라 한 단계와 내가 만난 오류입니다. 어떤 도움이라도 대단히 감사합니다.MVC2 및 MVC 선물로 인해 RedirectToAction 문제가 발생했습니다.

새로운 MVC2 앱을 만들고 HomeController의 About 액션을 Index 페이지로 리디렉션하도록 변경했습니다.

Return RedirectToAction("Index") 

그러나, 나는 강력한 형식의 확장을 사용하고 싶었, 그래서는 CodePlex에서 MVC 선물을 다운로드하고 내 프로젝트에 Microsoft.Web.Mvc에 대한 참조를 추가했다. 너무 좋아,

Return RedirectToAction(Of HomeController)(Function(c) c.Index()) 

지금까지 :

은 내가 위의 RedirectToAction에서 주석 HomeContoller.vb

Imports Microsoft.Web.Mvc 

의 맨 위에 다음 "가져 오기"문을를 CH3OH하고 다음 줄을 추가 . 그러나, 나는 내가 처음 (비 일반) RedirectToAction을 주석을 해제하는 경우, 그것은 이제 다음 컴파일 오류를 일으키는 발견 :

Error 1 Overload resolution failed because no accessible 'RedirectToAction' can be called with these arguments:
Extension method 'Public Function RedirectToAction(Of TController)(action As System.Linq.Expressions.Expression(Of System.Action(Of TController))) As System.Web.Mvc.RedirectToRouteResult' defined in 'Microsoft.Web.Mvc.ControllerExtensions': Data type(s) of the type parameter(s) cannot be >inferred from these arguments. Specifying the data type(s) explicitly might correct this error.
Extension method 'Public Function RedirectToAction(action As System.Linq.Expressions.Expression(Of System.Action(Of HomeController))) As System.Web.Mvc.RedirectToRouteResult' defined in 'Microsoft.Web.Mvc.ControllerExtensions': Value of type 'String' cannot be converted to 'System.Linq.Expressions.Expression(Of System.Action(Of mvc2test1.HomeController))'.

에도 인텔리 센스가 8 과부하 (원래 6 제네릭이 아닌 오버로드를 보여주는데하지만, 더하기 Futures 어셈블리의 2 가지 새로운 범용 오버로드), 코드를 컴파일하려고 할 때 컴파일러는 Futures assessmentmbly에서 2 개의 비 - 일반 확장 메소드 만 '찾는다.

나는이 내가 MVC2 어셈블리의 충돌 버전을 사용하고 문제 및 선물 조립 될 줄 알았는데, 그래서 난 내 프로젝트에 다운로드 선물에서 MvcDiaganotics.aspx을 추가 everytyhing 올바른 보았다 :

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
,코드베이스 : 파일 : /// 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 , 버전 = 2.0.0.0, 문화 = 중립, PublicKeyToken = null(210) 코드베이스 : 파일 : ///xxxx/bin/Microsoft.Web.Mvc.DLL
배포는 : 나를 미치게됩니다

을 빈 전개! Becuase 나는 이것이 어떤 VB 문제일지도 모른다고 생각하고, C#을 사용하여 새로운 MVC2 프로젝트를 만들고 위와 같은 시도를했다.

내가 HomeController.cs

using Microsoft.Web.Mvc; 

이 시간의 맨 위에 다음 "을 사용하여"문을 추가, 정보] 액션 메소드에서, 난 단지 전체를 입력하여 제네릭이 아닌 RedirectToAction 전화를 관리 할 수 의 커멘드를 다음과 같이 : 나는 다음과 같이 내가 아닌 일반적인 RedirectToAction 전화를 시도하는 경우, 클래스의 상단에 문을 "사용"했다하더라도

return Microsoft.Web.Mvc.ControllerExtensions.RedirectToAction<HomeController>(this, c => c.Index()); 

을 :

,961,

나는 다음과 같은 컴파일 오류 얻을 것이다 : 어떤주는

Error 1 The non-generic method 'System.Web.Mvc.Controller.RedirectToAction(string)' cannot be used with type arguments

를? 내가 평범한 것을 벗어나려고하는 것 같지가 않다. Futures 어셈블리에 대한 참조 만있는 간단한 바닐라 MVC2 프로젝트입니다.

나는 뭔가 명백한 것을 놓치기를 바라고 있지만, 너무 오랫동안 머리를 긁적 거리고있어, 그래서 나는 약간의 assisstance를 찾을 것이라고 생각했다.

누군가이 단순한 시나리오를 VB (및/또는 C#)에서 작동 시키면 그 사람들이 다르게 무엇을했는지 알려주실 수 있습니까?

감사합니다. 사용

답변

3

시도 :

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

this 한정자를 사용하여이 확장 방법을 사용할 수 있습니다.

+1

이것은 내 C# 프로젝트의 트릭을 아주 좋아했습니다. 'this'키워드를 사용해야하는 이유가 있습니까? 나는 그것이 암시 적이라고 생각했다. – Darragh