2009-04-07 16 views
7

ViewContextにアクセスできないユーティリティクラスからルートを作成したいとします。ASP.NET MVCでViewContextのないルートを作成するにはどうすればよいですか?

これは可能ですか? ViewContext.Current

私はルーティングとHttpContextのすべてのコンストラクタで釣りをしようとしましたが、私が欲しいものにはほとんど到達できません。

RouteTable.RoutesRouteCollectionであり、RouteDataではないため、これは機能しませんが、これは私が探しているものです。だから、近い - まだ今のところ:-)

 RequestContext requestContext = new RequestContext(HttpContext.Current, RouteTable.Routes); 
     UrlHelper url = new UrlHelper(requestContext); 
     var urlString = url.RouteUrl(new {controller="DynamicImage", action="Button", text="Hello World"}); 

注:RequestContestはタイプSystem.Web.Routing.RequestContextのものであり、ないのHttpContext

答えて

11

これを試してみてください:

var httpContext = new HttpContextWrapper(HttpContext.Current); 
var requestContext = new RequestContext(httpContext); 
var urlHelper = new UrlHelper(requestContext, new RouteData())); 

希望これは

に役立ちます

更新日:

前のページは正しくありません(私は自分のメモリから投稿しました)。 (それは私のプロジェクトの一つで動作します)の代わりにこれを試してみてください:

var httpContext = new HttpContextWrapper(HttpContext.Current); 
var requestContext = new RequestContext(httpContext, new RouteData()); 
var urlHelper = new UrlHelper(requestContext); 

new RouteData()はちょうどのみRequestContext初期化とnew UrlHelper(requestContext)のために使用され、実際に私はそれが実際に動作していることに驚いたnew UrlHelper(requestContext, RouteTable.Routes)

+0

を呼び出します。私は、空のRouteData()オブジェクトを持つことの意味が何であるかはまだ分かりません。おそらく、現在のルートを新しいルートの「ベース」として使用していますか?誰も知っている? –

+0

私の回答を更新しました –

+0

eu-ge-ne = ge-ni-us、ありがとう –

関連する問題