2

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': の値タイプ 'String' は 'System.Linq.Expressions.Expression(Of System.Action(Of mvc2test1.HomeController))' に変換できません。

intelli-sense は 8 つのオーバーロード (元の 6 つの非ジェネリック オーバーロードに加えて、Futures アセンブリからの 2 つの新しいジェネリック オーバーロード) を示していましたが、コードをコンパイルしようとすると、コンパイラは 2 つの非ジェネリック オーバーロードのみを「検出」したようです。 Futuresassesmblyからの一般的な拡張メソッド。

これは、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 Futures アセンブリ情報 (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" ステートメントを追加しました。

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)' は型引数では使用できません

何を与える?変なことをしようとしているわけではありません。これは、Futures アセンブリへの参照のみを持つシンプルなバニラ MVC2 プロジェクトです。

明らかな何かを見逃してしまったことを願っていますが、あまりにも長い間頭を悩ませてきたので、助けを求めることにしました.

誰かがこの単純なシナリオを (VB や C# で) 動作させることができた場合は、何が違うのか教えていただけますか?

ありがとう!

4

1 に答える 1

3

使用してみてください:

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

this修飾子を使用すると、拡張メソッドを使用できます。

于 2010-04-13T05:42:49.817 に答える