2011-08-14 6 views
1

直接実行している場合以外のASP.NET MVCアプリケーションで実行中の場合、現在実行中の要求のFormCollection、ViewData、ModelStateなどにアクセスする方法はありますかビューで?私はビュー内からカスタムハンドラを呼び出すことができますが、それらを渡すことなくこれらのコレクションにアクセスできるようにしたいと思います。私はWebフォームのHttpContext.Currentに似た何かを考えていますか?FormCollection、ViewData、およびModelStateへのアクセス方法

答えて

0

あなたが求めているもののほとんどにリンクすることができるViewContextオブジェクトがありますが、実際にはビュー内でこれをすべてやっている理由を自分自身に尋ねなければなりません。 (とにかくIMHO)

編集:あなたの質問が間違っているかもしれません。コントローラーにはControllerContextがあり、ビューにはViewContextがあります。 MVCのほとんどの拡張ポイントには、Requestとそのデータを取得するためのContextオブジェクトがあります。

2

 var wrapper=new HttpContextWrapper(System.Web.HttpContext.Current); 
     var routeData = RouteTable.Routes.GetRouteData(wrapper); 
     Controller con = (Controller)ControllerBuilder.Current.GetControllerFactory().CreateController(new RequestContext(wrapper, routeData), routeData.Values["controller"].ToString()); 
     var viewData = con.ViewData; 
     var modelState= con.ModelState; 
     var form=new FormCollection(); 
     var controllerContext = new ControllerContext(wrapper, routeData, con); 
     Predicate<string> propertyFilter = propertyName => new BindAttribute().IsPropertyAllowed(propertyName); 
     IModelBinder binder = Binders.GetBinder(typeof(FormCollection)); 
     ModelBindingContext bindingContext = new ModelBindingContext() 
     { 
      ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() => form, typeof(FormCollection)), 
      ModelName = "form", 
      ModelState = modelState, 
      PropertyFilter = propertyFilter, 
      ValueProvider = ValueProviderFactories.Factories.GetValueProvider(controllerContext) 
     }; 
     form = (FormCollection)binder.BindModel(controllerContext, bindingContext); 
をお試しください
関連する問題