3

ActionResult物事をブラウザにレンダリングするオブジェクトを返すプラグ可能なフレームワークがあります。最新の要件の 1 つは、プラグインを通常の ASP.NET Web フォーム アプリケーションから呼び出せるようにすることです。

これまでのところ、非常に基本的な ActionResults で機能するこれを思いつきました。

public class ActionResultTranslator {

    HttpContextBase _context;

    public ActionResultTranslator(HttpContextBase context ) {

        _context = context;
    }

    public void Execute(ActionResult actionResult) {

        ControllerContext fakeContext = new ControllerContext();
        fakeContext.HttpContext = _context;            

        actionResult.ExecuteResult(fakeContext);        
    }
}

上記を Web フォームから次のように呼び出します。

protected void Page_Load(object sender, EventArgs e) {
   HttpContextWrapper contextWrapper = new HttpContextWrapper(this.Context);
   var translator = new ActionResultTranslator(contextWrapper);
   translator.Execute(new RedirectResult("http://google.com"));     
}

すべてを接続するには、他に何をする必要がありますか? たとえば、ViewResult を返したい場合はどうすればよいでしょうか。

4

1 に答える 1

1

ControllerContextを偽造するためのプロパティはそれほど多くありません。

  • HttpContext-あなたはこれをカバーしています
  • コントローラー-私が知る限り、これがnullのままであるかどうかを標準のActionResultsは気にしません
  • RequestContext -nullのままにすると、自動的に入力されます
  • RouteData -nullのままにすると、空のコレクションが入力されます。

したがって、ActionResultがRouteDataに存在する任意のキーに依存する可能性があることを心配する必要があります。ViewResultは、ビューファイルを探す場所を認識できるように、アクションコントローラーにデータを入力する限り、満足できるはずです。RouteDataにこれらの値を提供するようにコードを変更する場合は、問題ないはずです。

于 2009-10-24T13:36:17.870 に答える