5

ASP.Net4およびMVC3フレームワークを使用してWebアプリケーションを開発しています。NuGetを使用してT4MVCをインストールしましたが、すべてのビュー、コントローラー、および静的コンテンツが強力な型として正常に生成されます。

しかし、プロジェクトをコンパイルしようとすると、生成されたファイルT4MVC.csでエラーが発生します。これは次のとおりです。

'T4MVC_ViewResultBase.FindView(System.Web.Mvc.ControllerContext)': 
 return type must be 'System.Web.Mvc.ViewEngineResult' to match overridden member
 'System.Web.Mvc.ViewResultBase.FindView(System.Web.Mvc.ControllerContext)'

生成されるソースコードは次のとおりです。

[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public class T4MVC_ViewResultBase : System.Web.Mvc.ViewResultBase,
                                                            IT4MVCActionResult 
{
  public T4MVC_ViewResultBase(string area, string controller, string action):
      base()  {
       this.InitMVCT4Result(area, controller, action);
    }

    protected override void FindView(System.Web.Mvc.ControllerContext context){}

    public string Controller { get; set; }
    public string Action { get; set; }
    public RouteValueDictionary RouteValueDictionary { get; set; }
}

エラーは次のように述べています。

protected override void FindView(System.Web.Mvc.ControllerContext context) { }

する必要があります:

protected override ViewEngineResult 
               FindView(System.Web.Mvc.ControllerContext context) { }

ただし、このメソッドはコードを返す必要があるため、別のコンパイルエラーが発生します。

継承元の基本クラスであるSystem.Web.Mvc.ViewResultBaseを確認すると、実際には、ViewEngineResultの戻りタイプでFindView ()が宣言されています。

public abstract class ViewResultBase : ActionResult
    {
        ...
        protected abstract ViewEngineResult FindView(ControllerContext context);
    }

誰かがこのエラーを受け取りましたか?MVCバージョンと関係がありますか?MVC3を使用していますか?

どうもありがとう!セルギ

4

1 に答える 1

5

問題が発生したと思いますが、これはT4MVCのバグです。しかし、うまくいけば、回避するのは簡単です。

ViewResultBaseを返すように宣言されているコントローラーアクションがありますか?もしそうなら、リターンタイプをActionResultに変更できますか?または、返されるタイプを、返される具体的なタイプ(ViewResultなど)に変更することもできますか?

T4MVCのバグは、ActionResultタイプの非voidメソッドを正しくオーバーライドしないことです。

于 2011-04-06T23:22:02.810 に答える