特定の条件が満たされていない場合は、httpmoduleを使用してWebサイトの特定のコンテンツを非表示にしています。私のハンドラの設定はかなり簡単です。私の質問に関連する部分は次のとおりです。ハンドラがMvcHandlerのときにサーバーコントロールへの参照を取得する
Public Interface IFeatureItem
Property ID As Guid
Sub FeatureItemPreRenderComplete(ByVal sender As Object, ByVal e As EventArgs)
End Interface
Public Class MyModule
Implements System.Web.IHttpModule
Public Sub Init(ByVal context As System.Web.HttpApplication) Implements System.Web.IHttpModule.Init
AddHandler context.PreRequestHandlerExecute, AddressOf Application_PreRequestHandlerExecute
End Sub
Private Sub Application_PreRequestHandlerExecute(ByVal source As Object, ByVal e As EventArgs)
If TypeOf source Is HttpApplication Then
Dim Application As HttpApplication = source
If TypeOf Application.Context.Handler Is Page Then
Dim Page As Page = Application.Context.Handler
AddHandler Page.PreRenderComplete, AddressOf FeatureItemPreRenderComplete
ElseIf TypeOf Application.Context.Handler Is System.Web.Mvc.MvcHandler Then
Dim MvcHandler As System.Web.Mvc.MvcHandler = Application.Context.Handler
<What do I do here>
End If
End If
End Sub
Private Sub FeatureItemPreRenderComplete(ByVal source As Object, ByVal e As System.EventArgs)
Dim Page As Page = source
Dim Repository As IFeatureRepository = GetRepository(Page.Application) 'Holds supported IFeature
Dim IFeatureItems As IEnumerable(Of IFeatureItem) = GetIFeatureItems(Page) 'Goes through Page's control tree and returns IFeatureItems
For Each IFeatureItem In IFeatureItems
Dim FeatureEventArgs As FeatureEventArgs = New FeatureEventArgs(IFeatureItem.ID, FeatureAllowed(IFeatureItem.ID, Repository))
IFeatureItem.FeatureItemPreRenderComplete(Me, FeatureEventArgs)
Next
End Sub
<Irrelevant stuff removed>
End Class
ハンドラがページの場合、基本的にページオブジェクトにイベントハンドラを設定します。次に、PreRenderEvent Iで、ページのすべてのIFeatureItemをループし、IFeatureItemのメソッドを呼び出します。ハンドラがページである場合、これはうまく動作します。
このサイトには、ダッシュボード用のmvcビューがあり、IFeatureItemでもよいWebフォームコントロールが含まれています。私がしたいことは、このビューのwebformsコントロールをループして、通常のページと同じ処理を行いますが、そうする方法は見つけられず、グーグルグーグルではありません。これはモジュール内で可能ですか? PreRequestHandlerExecuteはイベントハンドラを設定する正しいイベントですか?
あなたが言及したクラスのソース(およびMVCフレームワークの任意の部分)を見たい場合、彼はソースをダウンロードするだけです:http://aspnet.codeplex.com/releases/view/58781 –
私は望んでいました私のHttpModuleに実際には適合しないので、これを行う必要はありません。私は、OnPreRenderのサブを上書きするために、新しいpageBaseTypeとuserControlBaseTypeを作成できると思います。私は最小限の変更を加えるためにHttpModuleからこれを行うことができることを望んでいました。 HttpModuleのアプローチでは、特定のインタフェースを実装するオブジェクトにのみ影響します。このアプローチは、私のすべてのページとコントロールのbasetypeを変更するか、または私はいくつかの巧妙な切り替えを行う必要があります。 –
私の質問は、実際には、これらのViewPageおよびViewUserControlへの参照をMvcHandlerオブジェクトから取得するために実際にそこにあります。 –